0

为什么 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');
}

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

4

2 回答 2

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因此整行将最终成为echo $this->xyz->foo;有效的。

于 2012-09-24T11:24:38.743 回答
1

这是因为你在技术上做

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

这是有效的。

于 2012-09-24T11:25:18.247 回答