2010-02-16 3 views
0

Пожалуйста, рассмотрите этот пример. (PHP)какой метод более эффективен: установить свойство класса; или вернуть результат?

class Database{ 
    private $result; 
    private $conn; 

    function query($sql){ 
     $result = $this->conn->query($sql); 
     // Set the Database::$result ?? Or return the value and avoid setting property? 
     return $result; 
     // $this->result = $result; 
    } 
} 

Каковы преимущества обоих этих методов? Где они применимы?

ответ

0

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

Кроме того, поскольку вы используете только один набор результатов, вы можете переименовать свой класс в нечто более наглядное. «База данных» не совсем суммирует ее. Это «ResultSet». Если это конкретный тип набора результатов, подумайте об именовании его, чтобы он отражал тип данных, которые вы извлекаете.

0

Для лучшей структуры класса, я хотел бы предложить вам взглянуть на:

PHP Dependency Injection

Это отвечает наиболее подходящий подход вы можете захотеть следовать.

1

Основываясь на вашем коде, я считаю, что имеет смысл возвращать результат, а не устанавливать его как свойство класса базы данных. База данных (соединение как бы) будет иметь несколько результирующих наборов на протяжении всей своей жизни. Поэтому установка результата как свойства класса не имеет смысла, если вы собираетесь делать несколько запросов с использованием одного и того же объекта.

+0

В то время как соединение с базой данных может иметь несколько наборов результатов, я буду сохранять только самый последний результат, а методы, которые вызываются впоследствии, будут также использоваться это. Так что я все еще неясен: S – shxfee

0

Я не думаю, что имущество принадлежит Database, так что одно из следующих действий:

  1. возвращает запрос как
  2. Вернуть QueryObject, который уже установлен с вашим запросом, но дает вам дополнительные методы для выполнения результата запроса (например: разбиение на страницы, фильтрация)
Смежные вопросы