php-__get()和__set()的最佳做法
作者:互联网
从question开始,使用__get()和__set()访问私有变量,我想获得有关它们一般用法的输入.我想知道何时或何处是使用重载函数的最佳时间,以及在哪里使用了重载函数(如果有的话).
为了清楚起见,我们正在讨论以下功能:http://us2.php.net/manual/en/language.oop5.magic.php
解决方法:
惰性模型获取器(使用__get())
我不记得在我的应用程序中经常使用PHP的魔术方法,但是我记得__get()非常有用的一种情况.
过去,我在CakePHP框架中开发一个具有很多模型的应用程序,并且即使方法仅使用其中一个或两个方法,也初始化了用于特定控制器的所有模型(这就是Cake的工作方式).因此,我决定将其从惰性模型更改为惰性模型(首次使用时加载模型).
我所做的只是添加了一个非常简单的__get()函数,该函数查找具有特定名称的模型并将其加载.就像3-4行代码.我在AppController中定义了它(所有CakePHP类都派生自该控制器),突然我的应用程序获得了速度并使用了较低的内存.
稍后,我进行了进一步介绍,并以相同的方式加载了惰性组件.
动态模型方法(使用__call())
同样来自CakePHP的另一个好例子是Cake如何在模型上搜索.基本上,您有两个方法可用于每个模型:find()和findAll(),但是您也可以使用findBy< FieldName>()和findAllBy< FieldName>()方法进行搜索.
例如,如果您有数据库表
notes(id, date, title, body)
并为此创建蛋糕模型.您可以使用诸如findById(),findByTitle()之类的方法.您只需要CamelCase db字段,就可以更快地在任何字段上进行搜索.
Cake通过使用__call()魔术方法来做到这一点.如果您尝试执行一个不存在的方法,然后使用根据方法名称和参数动态创建的条件运行find()或findAll(),则调用此方法.这非常容易实现,可以为您带来很多好处.
标签:oop,magic-methods,php 来源: https://codeday.me/bug/20191024/1920595.html