Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ по имени класса к его полям. 
V
    Опции темы
Elfet
Дата 29.5.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Код

$dir_absolute=dirname(__FILE__).'/module';
        if ($handle = opendir($dir_absolute)) {
            while (false !== ($file = readdir($handle))) 
            {
                if (preg_match('/\.module.php$/i', $file)) 
                {
                     include_once($dir_absolute.'/'.$file); 
                     
                     $exp = explode(".", $file);
                     $name = $exp[0];
                     $class  = new $name;
                     
                     echo $class->title;
                }
            }
            closedir($handle);
        }

Тут, что бы получить поле класса title нужно создать его экземпляр. Как получить его не создавая экземпляра? $name::title?

Код

class admin 
{
    public $title = 'Admin';
}


Это сообщение отредактировал(а) Elfet - 29.5.2008, 13:21


--------------------
PM MAIL WWW Skype   Вверх
Glip
Дата 29.5.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



static ???


--------------------
user posted image
PM MAIL   Вверх
skyboy
Дата 29.5.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Elfet @  29.5.2008,  12:19 Найти цитируемый пост)
Как получить его не создавая экземпляра?

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

Добавлено через 1 минуту и 50 секунд
static-поля, правда, доступны только в версии, начиная с 5-й. 
PM MAIL   Вверх
Elfet
Дата 29.5.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Пользователю потом будет предложен выбор того класса который он хочет создать, в поле title - описание этого класса.
Когда я создаю массив всех классов из папку module мне нужно получить только эти title.

static не помогло: $name::$title  
Цитата

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ',' or ';' in W:\home\cp\www\index.php on line 36

Видимо так вообще нельзя. Если писать admin::$title - всё ок.

Добавлено через 4 минуты и 25 секунд
Код

eval('echo '.$name.'::$title;');


Это сообщение отредактировал(а) Elfet - 29.5.2008, 13:50


--------------------
PM MAIL WWW Skype   Вверх
Fortop
Дата 29.5.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Elfet
для чего вообще ООП?

Создай в классе метод для доступа к этому свойству.

Код

class simple {
    public static $title;

    public function getTitle()
    {
        return self::$title;
    }
}

simple::$title = 'none';

$p = new simple();

var_dump($p->getTitle());



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
skyboy
Дата 29.5.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Elfet @  29.5.2008,  12:48 Найти цитируемый пост)
$name::$title  

работает начиная с 5.3.0 должно работать. 

PM MAIL   Вверх
skyboy
Дата 29.5.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Fortop @  29.5.2008,  13:13 Найти цитируемый пост)
Создай в классе метод для доступа к этому свойству.

т.е. ты думаешь, что static-свойство недостижимо без обертки в виде метода?  smile 
а зачем оно тогда надо было бы?
PM MAIL   Вверх
Fortop
Дата 29.5.2008, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



skyboy
Цитата(skyboy @  29.5.2008,  17:31 Найти цитируемый пост)
т.е. ты думаешь, что static-свойство недостижимо без обертки в виде метода?


1. smile еще не работает, так как хочется ТС
Цитата(skyboy @  29.5.2008,  14:14 Найти цитируемый пост)
работает начиная с 5.3.0 должно работать. 

2.если он хочет нормально до него добираться не зависимо от класса, его имени и уровня наследования, то лучше метод smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0955 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.