我正在阅读这个页面 - http://deaduseful.com/blog/posts/50-php-optimisation-tips-revisited
其中一个建议是避免使用Zend Performance PDF引用的Magic Methods,它没有给出建议避免它们的理由.
经过一些谷歌搜索(并在这里结束一个不相关的问题),我想知道是否有人在这方面有任何推荐?
我在我的代码中使用了__get(),通常用于保存我并不总是使用的变量,例如
我可能有一个名为desc,category_id,time_added的表
我得到的东西会是这样的:
public function __get($name) { switch($name) { case 'name': case 'desc': case 'category': case 'time_added': $result = do_mysql_query(); $this->name = $result['name']; $this->desc = $result['desc']; $this->category = $result['category']; $this->time_added = $result['time_added']; return $this->{$name}; break; default: throw Exception("Attempted to access non existant or private property - ".$name); } }
这似乎是一种很好的做事方式,因为我只需要从数据库中获取一些东西,如果需要的话,我可以为$ article-> time_added而不是摆弄数组.
这会被视为不良做法和服务器上的额外负载吗?
通常我会使用魔术方法扩展类,如果子类与get中的某些东西不匹配,则执行类似的操作.
public function __get($name) { switch($name) { case 'name': case 'desc': case 'category': case …
我正在学习git并且正在关注http://gitimmersion.com上的优秀教程.
在这些教程中,有一个模糊试图解释分离的HEAD,并指出:
git中的"分离的HEAD"消息只是意味着HEAD(跟踪当前工作目录应匹配的内容的git部分)直接指向提交而不是分支.只有在您不切换到其他分支时,才会记住在此状态下提交的任何更改.一旦您签出新的分支或标签,分离的提交将"丢失"(因为HEAD已移动).如果要保存以分离状态完成的提交,则需要创建一个分支来记住提交.
关于这个的一些问题:
提前致谢!
首先,我使用Yii框架完全使用PHP,尽管Yii最终与这个问题没什么关系.
我有一个类,在其中我有一个名为$ data的数组.我想过滤掉与我发送给类的参数不匹配的数组中的某些元素(我将在下面添加一些语法给你一个更好的主意).因此我使用array_filter,它需要一个输入作为比较函数(即,对于特定元素返回true或false的函数.任何导致返回'false'的函数都将从数组中删除).
问题是因为输入的函数是在引号中输入的,所以我没有看到在实际类中使用比较函数的方法.但是当函数在类之外时,我无法调用我需要的实例变量.所以我真正需要的是能够以某种方式在类之外调用实例变量,将实例变量作为参数发送到函数,或以某种方式将比较函数保留在类中.
有什么想法吗?我提到的类是Yii中的一个小部件.下面是对该小部件的调用(不是那么重要).相关参数是'params'.
$this->widget('application.widgets.CListViewParam', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'params'=>array('receiverId'=>Yii::app()->user->userId),
));
Run Code Online (Sandbox Code Playgroud)
在窗口小部件的类中有一个实例变量来保存参数:
public $params = array();
Run Code Online (Sandbox Code Playgroud)
然后调用array_filter和比较函数:
$data = array_filter($data, "filterData");
Run Code Online (Sandbox Code Playgroud)
实际比较功能并不重要,但下面是骨架.请记住,它不在课堂上.
function filterData($item) {
// unable to access $this->params inside of this function!
}
Run Code Online (Sandbox Code Playgroud) 语境:
使用等于双引号和单引号的字符串比较
我尝试检查我的一个业务对象的字段"parentId"(String)的值,如下所示:
System.out.println("Status 1 = "+myBusObj.getParentId().equals("0"));
System.out.println("Status 2 = "+myBusObj.getParentId().equals('0'));
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Status 1 = true //where parentId was of value 0 (String)
Status 2 = false //where parentId was of value 0 (String)
Run Code Online (Sandbox Code Playgroud)
问题:为什么Status 1 is true
但是Status 2 is false
?