Простой ООП и PHP не работает ... кто-нибудь может помочь? :) - PullRequest
0 голосов
/ 08 августа 2011

Мой первый набег в ООП с PHP - я пытаюсь создать объект построителя запросов, который генерирует запрос на основе входных данных для объекта.Я бы предположил, что это так же просто, как и просто получает.

Я ожидал, что строка в определении функции buildQuery $active_value=$this->getActive; присвоит 1 атрибуту active объекта в соответствии с методом __construct() для ...безрезультатно ... что я делаю не так для достижения желаемого результата, т.е. buildQuery для возврата

select * from mytable where active=1

TIA!

class queryBuilder {

    function __construct(){
        $this->active=1;
    }

    public function active () {
        $this->active=1;
    }

    public function inactive () {
        $this->active=0;  
    }

    public function getActive(){
        return $this->active;
    }

    public function setActive($value){
        $this->active->$value;
    }

    public function buildQuery() {
        $active_value=$this->getActive();
        $query="select * from mytable where active=$active_value";
        return $query;
    }

}

$init=new queryBuilder();
echo $init->buildQuery();

1 Ответ

2 голосов
/ 08 августа 2011

Ответ на редактирование вопроса

Когда я запускаю это в браузере, я получаю select * from mytable where active=1. Я предполагаю, что это то, что вам нужно, основываясь на вашем вопросе. Если вы хотите, чтобы активные цитировались (что может быть опечаткой в ​​исходном вопросе), то вам нужно заменить $query="select * from mytable where active=$active_value"; на:

$query="select * from mytable where active='$active_value'";
// this will output select * from mytable where active='1'

Если вы хотите, чтобы это было логическое значение в MySQL, тогда достаточно использования 1 против 0, но вы можете разыграть:

$query="select * from mytable where active=CAST($active_value as BOOL)";
// this will output select * from mytable where active=CAST(1 as BOOL)

Оригинальный текст

Ну, во-первых, вам нужно использовать -> вместо =, во-вторых, вам нужно вызвать функцию:

// not: $active_value=$this=getActive;
$active_value=$this->getActive();

Пара комментариев:

  • Как правило, в ООП методы обычно разбиваются на do, get и set. Имена часто бывают разные, но они всегда должны быть глаголами. inactive и active не совсем интуитивно понятны.
  • Если у вас есть методы getActive и setActive, часто полезно использовать их для изменения состояния самого объекта. Существуют исключения из соображений производительности и тому подобного, но, как правило, это хорошая идея, и она усиливает наличие этих методов. inactive следовательно, должно быть function inactive(){ $this->setActive(1);}
  • Вы почти никогда не должны назначать новую переменную заранее определенному классу. Всегда объявляйте переменные заранее, когда можете (добавьте private $ active; в строке 1 класса)
  • Поскольку $this->active является логическим значением, то, вероятно, оно должно быть ИСТИНА или ЛОЖЬ, пока оно фактически не будет добавлено в запрос: $active_value = $this->getActive()? 1: 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...