小编Sam*_*amT的帖子

PHP - Zend说避免魔术方法?

我正在阅读这个页面 - 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 …

php performance magic-methods

10
推荐指数
1
解决办法
4853
查看次数

理解git中的分离HEAD

我正在学习git并且正在关注http://gitimmersion.com上的优秀教程.

在这些教程中,有一个模糊试图解释分离的HEAD,并指出:

git中的"分离的HEAD"消息只是意味着HEAD(跟踪当前工作目录应匹配的内容的git部分)直接指向提交而不是分支.只有在您不切换到其他分支时,才会记住在此状态下提交的任何更改.一旦您签出新的分支或标签,分离的提交将"丢失"(因为HEAD已移动).如果要保存以分离状态完成的提交,则需要创建一个分支来记住提交.

关于这个的一些问题:

  1. 什么是独立的HEAD,以及创造它的条件是什么?
  2. 为什么分离的HEAD指向特定的提交而不是分支?
  3. 当你有一个分离的HEAD时,你是否总是需要创建一个新的分支来提交/推送它的变化?为什么/为什么不呢?

提前致谢!

git

4
推荐指数
1
解决办法
1万
查看次数

如何将参数发送到PHP中的比较函数?

首先,我使用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)

php compare class yii

2
推荐指数
1
解决办法
326
查看次数

.equals("0")和.equals('0')之间的区别

语境:

使用等于双引号和单引号的字符串比较

我尝试检查我的一个业务对象的字段"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

java string equals

0
推荐指数
1
解决办法
1529
查看次数

标签 统计

php ×2

class ×1

compare ×1

equals ×1

git ×1

java ×1

magic-methods ×1

performance ×1

string ×1

yii ×1