Почему mysql_fetch_object терпит неудачу, когда имя_класса равно нулю, хотя это значение по умолчанию? - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь написать простой класс-обертку базы данных. Я написал такой метод:

public function get_objects($sql, $class_name = null) {
    $result = mysql_query( $sql, $this->connection );
    $objs = array();
    if( $result ) {
        while ($obj = mysql_fetch_object($result, $class_name)) {
            $objs[] = $obj;
        }
        mysql_free_result($result);
    }
    return $objs;
}

Если я не укажу $ class_name при вызове этого метода, вызов mysql_fetch_object завершится ошибкой:

PHP Fatal error:  Class '' not found in ...

Проблема в том, что я не хочу, чтобы он использовал имя_класса. Я просто хочу, чтобы он выполнял поведение по умолчанию, как если бы я не указал имя_класса.

Почему это не получается?

Ответы [ 3 ]

3 голосов
/ 26 июля 2011

Значение по умолчанию не равно null. По умолчанию stdClass (из документов):

Имя класса для создания экземпляра, установки свойств и возврата. Если не указано, возвращается объект stdClass .

Если вы хотите сохранить то же значение по умолчанию, вам нужно иметь это в качестве сигнатуры вашего метода:

 public function get_objects($sql, $class_name = "stdClass") {
     // continue as normal.
2 голосов
/ 26 июля 2011

Если вы не хотите указывать определенный класс, то почему вы даже используете аргумент class_name?

Если вам абсолютно необходимо его использовать, это должно работать

if ( $result ) {
   $class_name = $class_name ? $class_name : 'stdClass';
   ...
0 голосов
/ 26 июля 2011

Может быть потому, что она ожидает строку, а вы даете ей ноль.Я бы сделал проверку if, чтобы увидеть, $ name_name! = Null.

public function get_objects($sql, $class_name = null) {
    $result = mysql_query( $sql, $this->connection );
    $objs = array();
    if( $result ) {
        if ($class_name){
            while ($obj = mysql_fetch_object($result, $class_name)) {
                $objs[] = $obj;
            }
        }else{
            while ($obj = mysql_fetch_object($result)) {
                $objs[] = $obj;
            }
        }
        mysql_free_result($result);
    }
    return $objs;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...