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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строку в объект, Или можно по другому?статические классы 
V
    Опции темы
444ert666
Дата 24.12.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!

Задача такая. Нужно реализовать функцию входным параметром которой является имя статического класса(в виде строки), а выходным результат выполнения этого метода в этом классе.
примерно так:

Код

<?php
class CTest
{
    static protected $out=1;
   
   static public function run()
   {
       return self::$out++; 
   }
}

function test($name)
{
   return $name::run();
}

print test('CTest');
?>


Естесственно не работает, выдает ошибку:
Код

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /web/sub/mycms/test.php on line 14


Как можно реализовать сие? это вооще возможно?

Заранее спасибо.

Добавлено через 10 минут и 42 секунды
Сорри, наше решение, сделал вот так:

Код

<?php
class CTest
{
    static protected $out=1;
   
   static public function run()
   {
       return self::$out++; 
   }
}

function test($name)
{
   return eval("return $name::run();");
}

print test('CTest');
?>


Но насколько это правильно с идеологической точки зрения? может есть решение поизящней?
PM MAIL   Вверх
Dima 2015
Дата 24.12.2008, 17:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



444ert666, eval должно помочь.

$class = 'class_name';
$method = 'method_name';

eval("$class::$method;");

Добавлено через 8 минут и 11 секунд
Код

<?php
class Test {
    
    static function my_method() {
        echo 'q';
    }
    
}

function run($class, $method) {
    eval("$class::$method;");
}

run('Test', 'my_method()');
?>


Вот так у меня работает...

Добавлено через 10 минут и 15 секунд
444ert666, 

in /web/sub/mycms...

ЦМС свою пишешь? : )))

Добавлено через 12 минут и 1 секунду
444ert666, есть у меня подозрение что это единственное решение - обращаться к классу и его методу, когда имя класса/метода заданно строковой переменной. Совершенно недавно знакомый задавался такой задачей, и мы с ним ничего иного не придумали, а у него стаж немалый уже...

Ну хотя местные гуру как всегда может изобретут что-то smile
PM MAIL ICQ   Вверх
ksnk
Дата 24.12.2008, 19:26 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



А eval-то тут к чему?
Код

class Test {
    
    static function my_method() {
        echo 'q';
    }
    
}
function run($class, $method) {
   call_user_func(array($class, $method));
 // eval("$class::$method()");
}
run('Test', 'my_method');





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
444ert666
Дата 25.12.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk, 

Спасибо огромное, думаю это более удачный способsmile
PM MAIL   Вверх
Dima 2015
Дата 25.12.2008, 15:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



444ert666, 
ksnk, угу, если токо не нужно параметры передавать в ф-цию, то наверное так быстрее. А вот параметры, на сколько я знаю, передать не получится при подходе, предлагаемом ksnk.
PM MAIL ICQ   Вверх
solenko
Дата 25.12.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 34
Всего: 67



Dima 2015, вы бы в мануал заглянули перед тем как что-то утверждать. 


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Dima 2015
Дата 25.12.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



solenko, хех.. справедливо. Прочитал беглым взглядом, на самом деле там написано что по ссылке нельзя передать в нее параметры, а я грешным делом подумал что все...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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