Xpoint
   [напомнить пароль]

Вызвать статическое свойство объекта из переменной

Метки: [без меток]
2008-05-06 19:53:58 [обр] Pro PHP[досье]

Есть переменная:

$strName = 'TestClass';

Нужно вызвать статическое свойство класса. Имя класса размещено в переменной.
Вот сам класс:

class TestClass
{
  public static myFunc()
  {
     echo 'It's worked! Good.';
  }
}

А вот я что я делаю, и это неправильно:

$strName::myFunc();

Помогите сделать правильно, и самое главное, понять, почему так не работает.
Например, если бы я вызывал функцию, то все бы работало. Вот пример:

$funcName = 'strlen';

echo $funcName( 'Hello World!' );

Должно вывести длину строки (если я все написал верно).

спустя 22 минуты [обр] Прокаев2(13/35)[досье]
call_user_func($strName."::myFunc");
спустя 17 минут [обр] Ali(5/5)[досье]
Я думаю правильнее так (по крайней мере в документации рекомендуется для вызовов статических методов)
call_user_func(array($strName, 'myFunc'));
спустя 2 часа 45 минут [обр] Pro PHP[досье]

Молодцы что вспомнили об этой функции. Я с ней сталкивался однажды, да и забыл. Кстати, а если я уже нахожусь внутри объекта из которого хочу вызвать статический методы, может можно как-то сослаться на текущий объект? Здесь $this не прокатит :)

Ребята, а как вызвать метод объекта? Аналогичным способом, только первым элементом массива передавать ссылку на объект, вроде так.

ОГРОМНОЕ СПАСИБО !!!

спустя 9 часов [обр] Алексей Шоков(6/9)[досье]

Pro PHP[досье], читаем документацию, там всё написано:

call_user_func(array($yourObject, 'methodName'));

Чтобы вызвать статический метод класса внутри другого статического метода, нужно использовать self — своеобразный аналог $this в статическом контексте:

self::method();
спустя 45 минут [обр] Pro PHP[досье]
Алексей Шоков[досье] Алексей, спасибо за ответы. Насчет self я протупил :) Вероятно вечером был уставший, и необдуманно задал пару вопросов, на которые утром сам бы нашел ответы. Спасибо за помощь еще раз!
спустя 4 часа 10 минут [обр] Pro PHP[досье]

Даю рабочий пример, может кому понадобится:

<?php
class Test
{
   public static function myTest( $a, $b )
   {
      return $a + $b;
   }
}

$intRez = call_user_func_array(array('Test', 'myTest'), array(5, 3) );
echo $intRez; // выводит 8 (5+3)

?>

Здесь производится вызов функции с двумя параметрами (можно и с большим числом, главное что уже не с одним). Пример рабочий, пользуйтесь.

Powered by POEM™ Engine Copyright © 2002-2005