Возвращаемое значение PHP Object - PullRequest
1 голос
/ 13 июня 2009

В настоящее время я программирую класс базы данных, который немного использует PHP-класс PDO, но я бы хотел добавить несколько простых функций, чтобы немного упростить программирование определенного приложения.

Теперь В следующем фрагменте псевдокода вы можете увидеть, куда я иду. Единственная проблема в этом примере состоит в том, что переменная $ result является объектом, который нельзя использовать для сравнения некоторых вещей, которые я делаю в дальнейшем в скрипте:

<code><?php

class Database
{
    public function FetchRow ( $query )
    {
        // .. do some stuff, and make a $result variable
        return DatabaseStatement ( $result );
    }
}

class DatabaseStatement
{
    private $result;

    public function __construct ( $query )
    {
        // .. save result in property etc.
    }

    public function __get ( $column )
    {
        // .. check result item

        return $this -> result [ $column ];
    }
}

$db     = new Database;
$result = $db -> Query ( 'SELECT * FROM users WHERE id = 1;' );

if ( $result != null ) // Here $result should be an array OR null in case no rows are returned
{
    echo $result -> username; // Here $result should call the __get method
    echo '<pre>' , print_r ( $result ) , '
'; // Здесь $ result должен быть массивом, потому что он еще не был нулевым }

Как видите, переменная $ result не должна быть объектом, когда я выполняю сравнение, я знаю, что она может быть преобразована в строку с использованием __toString. Но я бы хотел, чтобы это был какой-то другой тип, в основном массив или ноль.

Как мне заставить что-то подобное работать, если это возможно (должно быть возможно, я думаю, слишком много хлопот)?

Так может кто-нибудь указать мне правильное направление, или, возможно, дать фрагмент кода, который должен работать, или я могу изменить, чтобы соответствовать моему текущему классу?

Ответы [ 4 ]

2 голосов
/ 13 июня 2009

Мне кажется, что вам просто нужно добавить несколько методов, которые делают то, что вы хотите. Вместо того, чтобы заставлять объект $ result быть массивом или нулем, чтобы проверить, является ли он пустым, почему бы вам просто не создать и не вызвать метод isEmpty (), который сообщает вам, что вы хотите знать?

А если вам нужен массив, создайте метод toArray (), который возвращает то, что вы хотите. ИЛИ, что еще лучше, заставьте ваш объект реализовать Iterator и / или ArrayAccess из Стандартной библиотеки PHP .

1 голос
/ 13 июня 2009

Я думаю, вам придется делать это там же, где вы создаете DatabaseStatement. Так, например:

public function FetchRow($query)
{
    // ... do some stuff, and make a $result variable.
    $ds = DatabaseStatement($result);
    if ($ds) {
        return $ds;
    }
    else {
        return null;
    }
}
0 голосов
/ 13 июня 2009

Используйте класс PDOStatment и его свойство rowCount.

0 голосов
/ 13 июня 2009

Это невозможно. PHP не позволяет перегружать операторы.

...