简单、好用的php 集成开发环境 Xserver

访问器和修改器——看laravel中如何优雅实现getter和setter

访问器和修改器的概念类似java或者c#中的setter和getter。或者说这个概念或者模式在很多平台上都有不同的实现和应用,比如vue的计算属性也是类似getter的概念。

 访问器

访问器有什么好处?能解决啥问题?我为啥要用访问器呢?下面用一个实例来回答这个问题以及描述如何实现和使用访问器。

一个Person类,有两个属性,firstName 和 lastName。如果在一个场景下你要获取一个person实例的姓名(全名)时应该怎么实现呢?

最后一个方案就是访问器,开发者按照驼峰命名,声明访问器函数,getXXXAttribute,然后就可以直接通过动态属性的方式来调用此访问器。 

可以看到此功能和java、c#中的getter完全相同,和vue中的计算属性类似。

修改器

修改器的使用方式和访问器类似,过程相反。比如Person类的firstName在数据库中存储的值要求全部要小写。当然这个需求很扯淡,大家领会精神就好。那么正常人的实现方式应该是:

$person->save();

appends(追加器)

如果你想将上面例子中的fullName在序列化为json字符串的过程中添加进去的话,那么你只需要在person类中重写appends属性(这是一个字符串的数组),在数组中添加first_name即可。

这非常有用,比如一个订单表(OrderModel),中有一个status(状态)字段,这是一个int值,但是前段要求你返回字符串格式的状态名的时候应该如何做呢?答案很简单:

另外 

使用访问器的时候,因为没有显式调用getXXXAttribute方法,phpstorm会将getXXXAttribute方法划上波浪线,并且认定为空引用方法, 此时你可以将此方法的警告压制住。

 

phpstorm对php和laralel的支持是非常友好的,各种快速修复和代码检查(inspect code)功能对工程化的php开发非常有帮助,所以强烈建议使用phpstorm作为php项目开发的ide。当然现在除了phpstorm好像也没有可以称之为ide的php开发工具了吧。

 

ps.ps. phpstorm的激活码和激活码以及永久激活方案在这里

热门评论

  • lxbfYeaa
    e
  • lxbfYeaa
    e