访问器和修改器的概念类似java或者c#中的setter和getter。或者说这个概念或者模式在很多平台上都有不同的实现和应用,比如vue的计算属性也是类似getter的概念。
访问器
访问器有什么好处?能解决啥问题?我为啥要用访问器呢?下面用一个实例来回答这个问题以及描述如何实现和使用访问器。
一个Person类,有两个属性,firstName 和 lastName。如果在一个场景下你要获取一个person实例的姓名(全名)时应该怎么实现呢?
最后一个方案就是访问器,开发者按照驼峰命名,声明访问器函数,getXXXAttribute,然后就可以直接通过动态属性的方式来调用此访问器。
可以看到此功能和java、c#中的getter完全相同,和vue中的计算属性类似。
$person->save();
如果你想将上面例子中的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的激活码和激活码以及永久激活方案在这里
热门评论