Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > mysql_fetch_object и private конструктор


Автор: alex77 31.1.2008, 11:29
Здравствуйте.
Возник вопрос:
Код

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?


Автор: skyboy 31.1.2008, 12:38
Хм. нигде в документации не нашел описания подобного эффекта. возможно, баг.
а версия PHP какая?

Автор: alex77 31.1.2008, 12:46
php 5.2.4

http://php.net/manual/en/function.mysql-fetch-object.php 

Автор: skyboy 31.1.2008, 13:48
с ссыдкой знаком, но не понял, зачем ты её привел. я там никаких ньюансов, связанных с областью видимости не нашел. А ты?

Автор: alex77 31.1.2008, 13:55
Тоже не нашел.
Ссылку привел так, на всякий случай. 
Всётаки хочется разобраться, баг это или фича, ато наделаешь, а в следующей версии уберут.

Автор: skyboy 31.1.2008, 14:35
Цитата(alex77 @  31.1.2008,  12:55 Найти цитируемый пост)
ато наделаешь, а в следующей версии уберут.

а если сразу сделать public-конструкторы? smile

Автор: Glip 31.1.2008, 23:50
http://www.php.net/manual/en/language.oop5.decon.php
Код

Constructor
void __construct ([ mixed $args [, $... ]] )

PHP 5 allows developers to declare constructor methods for classes. 
Classes which have a constructor method call this method on each newly-created object, 
so it is suitable for any initialization that the object may need before it is used.

Автор: alex77 7.2.2008, 07:19
Спасибо, прояснили ситуацию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)