为什么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行,保存了我的工作,网站默默地死在了它上面。
答案 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');
哪个有效。