Фича или баг?

serglt

Анус, ой, Ахтунг
PHP - 5.2.8
PHP:
class MyObj {
	protected $myVar = '123';
	function __construct () {
		echo "Construct\n";
		$this -> myVar = '321';
	}
	
	function __set ($k, $v) {
		echo "Setting field (myVar = {$this->myVar}): ";
		print_r (func_get_args ());
		$this -> $k = $v;
	}
}
$sql = new mysqli ('localhost', 'user', 'password', 'test');

print_r ($sql -> query ("SELECT * FROM Table") -> fetch_object ('MyObj'));
 

serglt

Анус, ой, Ахтунг
http://lt.php.net/manual/en/mysqli-result.fetch-object.php - Дык тут в описалове не пишут ничего, хотя счас белее внимательно прочитал, и там есть пометка только для процедурного стиля (что я обычно не читаю), как раз по этой "баго/фиче"
 

serglt

Анус, ой, Ахтунг
Либо - криво ман напасан, либо - на этом мысль останавливается, я счас понял что ОО стайл - все должно быть как должно быть (мухи на котлетах), а вот в процедурном (через жопу котлеты на мухах)
 

serglt

Анус, ой, Ахтунг
В баг треке кстати версия 5.2.9, так что в моей версии (5.2.8) неудивительно что не пофиксено.
 

Mols

Новичок
если речь о том, что свойства устанавливаются ДО вызова конструктора - это НЕ БАГ.
И это есть в документации.
http://lt.php.net/manual/en/mysqli-result.fetch-object.php
Note that mysqli_fetch_object() sets the properties of the object before calling the object constructor.
Но к сожалению какие-то добрые люди этот "баг" действительно пофиксили.
И гдето после 5.2.12 эта фича не работает.
В 5.3 вернули всё на места.
 

serglt

Анус, ой, Ахтунг
Note that mysqli_fetch_object() sets the properties of the object before calling the object constructor. - значит документация написана криворуко
В моем понимании, эта строчка, находящаяся в конкретном месте документации (после процедурного стиля), говорит что именно для процедурного подхода эта фича будет работать, а для ОО нет. Для того чтобы я понял что это работает для обоих стилей, надо было ниписать хотя бы без упоминания mysqli_fetch_object().
 
Сверху