mysql_fetch_object и private конструктор

alex77

Новичок
mysql_fetch_object и private конструктор

Здравствуйте.
Возник вопрос:

PHP:
class test {
  private $id, $name;
  private function __construct($a) {
    echo'вызван конструктор, '.$a;
  }
}
$result = mysql_query('SELECT `id`, `name` FROM `tbl` LIMIT 1', $db);
$rows = mysql_num_rows($result);
for ($i = 0; $i < $rows; $i++) {
  $row = mysql_fetch_object($result, 'test', array('привет'));
}
выводит:

вызван конструктор, привет

Почему так происходит, ведь конструктор private?
 

BigWindow

Новичок
Видимо потому, что у __construct больший приоритет, чем у определения функци, как Private. Это мне так кажется.
 

Фанат

oncle terrible
Команда форума
Блин. Объясните мне, как это работает вообще? В смысле откуда два последних параметра у mysql_fetch_object?
 

Fred

Новичок
Автор оригинала: *****
Блин. Объясните мне, как это работает вообще? В смысле откуда два последних параметра у mysql_fetch_object?
Вторым параметром идет имя класса, который попытатся создать (по-умолчанию stdClass), третьим - массив параметров конструктора

Обращение к полям класса происходит напрямую, несмотря на модификаторы видимости. Даже если существует __set(), то он игнорируется

P.S. В PDO fetchObject работает также

PHP:
class Test {
    private $id;
    private $name;
}

$db = new PDO("pgsql:host=xxx;port=xxx;dbname=xxx", "xxx", "xxx");

$obj = $db->query("SELECT 1 AS id, 'fred' AS name")->fetchObject("Test");

print_r($obj);
выведет

Test Object ( [id:private] => 1 [name:private] => fred )
 

Фанат

oncle terrible
Команда форума
shit. У меня русская открывается.
Понятно, спасибо.
 

alex77

Новичок
Fred
Обращение к полям класса происходит напрямую, несмотря на модификаторы видимости. Даже если существует __set(), то он игнорируется
Это где Вы такое прочитали, можно ссылку?
 

Fred

Новичок
Автор оригинала: alex77
Fred

Это где Вы такое прочитали, можно ссылку?
На самом деле нигде не прочитал. Просто сам факт заполнения приватных полей класса без наличия конструктора и __set натолкнул на такую мысль. И вызов приватного конструктора тоже. Видимо на более низком уровне модификаторы видимости полей/методов не учитываются :(
 
Сверху