Использование mysql_fetch_assoc () для создания наследуемого объекта в PHP - PullRequest
2 голосов
/ 26 февраля 2012

Я недавно начал использовать mysql_fetch_object() при циклическом просмотре объектов в моей лично разработанной CMS.

Раньше я использовал цикл while($row = mysql_fetch_assoc($rows)) { ... }

, а затем я создавал объект и присваивал ему значения в цикле:

$object = new Object(); 
$object->set_by_row($row); // Does what it says

Что яочень хочу сделать, это использовать:

while ($object = mysql_fetch_object($rows, 'self')) { ... }

Я также пытался использовать:

while ($image = mysql_fetch_object($rows, 'Image')) { ... } // Actual class name

Но я не могу!Большинство моих классов являются подклассами родительского класса с именем Identifiable, который представляет собой набор переменных и функций, которые применяются ко всем моим подклассам.Он также хранит идентификатор каждого объекта - поэтому, когда я использую mysql_fetch_assoc(), устанавливаются только переменные, установленные в этом классе, а не связанные родительские переменные.

Кто-нибудь знает способ использования mysql_fetch_object для установки объектов, включая их унаследованные переменные?

Примечание. Это все внутри статической функции внутри подкласса.

Вотvar_dump после строки назначения:

object(Image)#5 (16) {
    ["title":"Image":private]=> string(0) ""
    ["location":"Image":private]=> string(0) ""
    ["description":"Image":private]=> string(0) ""
    ["file_name":"Image":private]=> string(14) "0_IMG_0984.JPG"
    ["original_x":"Image":private]=> string(4) "2592"
    ["original_y":"Image":private]=> string(4) "1944"
    ["type":"Image":private]=> string(3) "jpg"
    ["id"]=> string(1) "1"
    ["added_by"]=> string(1) "1"
    ["updated_by"]=> string(1) "0"
    (...) ["deleted_by"]=> string(1) "0" ["deleted"]=> string(1) "0" ["published"]=> string(1) "0" ["datetime_added"]=> string(19) "2012-02-25 22:51:08" ["datetime_updated"]=> string(19) "0000-00-00 00:00:00" ["datetime_deleted"]=> string(19) "0000-00-00 00:00:00"
}

Как видите, ID там, но мой метод get находится в родительском классе и ничего не возвращает.

Метод получения в классе Identifiable находится здесь:

function get_id()
{
    return $this->id;
}

КРИТИЧЕСКОЕ ОБНОВЛЕНИЕ:

После того, как я установил объект: while ($image = mysql_fetch_object($rows, 'Image')) { ... } Я попытался вызвать echo $image->get_id(); и онработает отлично!

Тем не менее, моя проблема все еще существует: в настоящее время я вызываю функцию в цикле (get_interface_preview()), которая на самом деле содержит вызов $this->get_id() и по-прежнему ничего не возвращает.

Завершите капитальный ремонт!

Моя проблема здесь:

function get_interface_preview()
{
    echo $this->get_id();
    return "<a href='?a=edit&id='".$this->get_id()."'><img src='".IMAGE_PATH."library/admin_thumb/".$this->file_name."'></a>";
}

Это хорошо идентифицирует идентификатор, но идентификатор не добавляется в разметку .. Я чувствуюЯ сделал как-то ОГРОМНУЮ ошибку новичка?!

ИСПРАВЛЕНО!Мне очень жаль, это был апостроф не в том месте!К сожалению,

Ответы [ 2 ]

4 голосов
/ 26 февраля 2012

Вы должны дать ему имя класса, 'self' не является именем класса. Используйте get_class($this), чтобы получить имя класса текущего объекта, поэтому:

while ($object = mysql_fetch_object($rows, get_class($this))) { ... }

Или, если используется статический метод, используйте get_called_class():

while ($object = mysql_fetch_object($rows, get_called_class())) { ... }

См. Также этот вклад в документацию PHP по автономному базовому классу Singleton

0 голосов
/ 26 февраля 2012

Я поставил апостроф не в том месте. Не стесняйтесь бросать унижение на мой путь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...