为什么netbeans和PHP都没有报告此代码的错误

时间:2012-09-24 11:23:03

标签: php

为什么netbeans和PHP都没有报告此代码中的错误:

public function __construct ()
{
global $blog;
$this->_blog_id = $blog->blog_id;
$this->_post_amount = $blog->
$this->_limit_per_page = $blog->config_get('posts_limit_per_page');
$this->_short_sign_limit = $blog->config_get('posts_short_sign_limit');
}

我接了一个电话,忘记了未完成的第3行,保存了我的工作,网站默默地死在了它上面。

2 个答案:

答案 0 :(得分:3)

$this->_post_amount = $blog->
$this->_limit_per_page = $blog->config_get('posts_limit_per_page');

也可以写成

$this->_post_amount = $blog->$this->_limit_per_page = $blog->config_get('posts_limit_per_page');

这没有意义但完全有效。

但是,在您的情况下,它会破坏您的脚本,因为在没有$instance->$other_instance方法的情况下使用__toString会导致此错误:Object of class Test could not be converted to string。你IDE没有检查这个,因为它确实是一个边缘情况,一旦它不是$this->$this,但是例如$this->$that $that另一个函数的返回值几乎不可能知道$that可以是什么。


以下是一些示例代码,证明$this->$this实际上可以正常工作:

<?php
class Foo {
    public $foo = 'bar';
}

class Test {
    private $xyz;
    function __construct() {
        $this->xyz = new Foo();
    }
    function __toString() {
        return 'xyz';
    }
    function run() {
        echo $this->$this->foo;
    }
}

$t = new Test();
$t->run();

$this->$this语句会导致__toString被用于第二个$this,因此它将等同于$this->xyz,因此整行将以{{ 1}}这是有效的。

答案 1 :(得分:1)

因为你在技术上正在做

$this->_post_amount = $blog->{$this->_limit_per_page} = $blog->config_get('posts_limit_per_page');

哪个有效。