$this->_post_amount = $blog->
$this->_limit_per_page = $blog->config_get('posts_limit_per_page');
can also be written as
$this->_post_amount = $blog->$this->_limit_per_page = $blog->config_get('posts_limit_per_page');
which makes no sense but is perfectly valid.
However, in your case it breaks your script because using $instance->$other_instance without a __toString method results in this error: Object of class Test could not be converted to string. You IDE does not check for this since since it's really an edge case and as soon as it's not $this->$this but e.g. $this->$that with $that being e.g. the return value of another function it would be near impossible to know what $that can be.
Here's some example code that proves how $this->$this can actually work fine:
<?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();
The $this->$this statement will result in __toString being used for the second $this and thus it will be equivalent to $this->xyz so the whole line will end up as echo $this->xyz->foo; which is valid.
display_errors=onanderror_reporting=E_ALLvia php.ini