2012-09-03 3 views
2

У меня есть 2 класса: один - это DBobject, который содержит общий запрос базы данных и другие дочерние классы, каждый из которых имеет конкретный запрос к базе данных. Теперь проблема в том, что когда я пытаюсь инициализировать переменную table_name родительского класса, она не инициализируется. Я пробовал много способов, но он показывает, что при выполнении запроса таблица пуста. Вот код:Инициализация переменной родительского класса из дочернего класса

<?php 
class DBobject { 

public static $table_name=""; 

public static function find_all(){ 
    global $database; 
    return self::find_by_sql("SELECT * FROM ".self::$table_name); 
} 

} 
?> 


<?php 
class Catagory extends DBobject{ 
public static $table_name ="catagory"; 
} 
?> 


?> 

Основное применение:

<?php 
$cata = Catagory::find_all(); 
    foreach($cata as $catag){ 
    echo "Catagory Name :" . $catag->name."<br/>"; 
} 


?> 

Я хочу, чтобы иметь возможность инициализировать тип таблицы следует, что функция find_all DBobject() будет работать дальше. Пожалуйста, помогите мне с этим. Это ошибка, которую я получаю. Noticet, чтобы запрос не содержал имя таблицы.

Database query Failed You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 

last SQL query: SELECT * FROM 
+1

[Использовать глобальные переменные в классе] (http://stackoverflow.com/questions/11923272/use-global-variables-in -a-class/11923384 # 11923384) – PeeHaa

+0

Вы меня в классах детей –

+2

Нет! Пожалуйста, не изменяйте глобальные переменные пользователя! За исключением ОЧЕНЬ редких случаев. – SteAp

ответ

0

Если вы на PHP 5.3 или выше, вы можете сделать это, потому что они добавили 'поздно статические привязки'

http://php.net/manual/en/language.oop5.late-static-bindings.php

вы можете использовать get_called_class() или статические :: (вместо self: :) для ссылки на класс, который был вызван вместо класса, код находится в

+0

В этой проблеме я не имею 5.3 на сервере, я понимаю, что решить проблему будет основной проблемой, так это то, что функция не имеет проблемы, единственная проблема, как я могу инициализировать имя таблицы в соответствии с дочерним класса или быть более конкретной дочерней таблицей. –

+0

Вы не можете сделать это со статическими функциями перед v5.3 ... У меня была такая же точная проблема, и в итоге я просто обновился до php 5.3 .... Конечно, вы можете переписать свой код, чтобы обойти его, добавив кучу дополнительные функции, но этот вид побеждает в том, что касается расширения класса в первую очередь. Нижняя строка. В итоге вы должны обновиться до 5.3, почему бы не просто сэкономить время и сделать это сейчас? (тратить время на повторное кодирование или проводить время на обновление?) – RobertMaysJr

Смежные вопросы