Получить экземпляр класса по имени. PHP5

Balkon

Новичок
Получить экземпляр класса по имени. PHP5

В переменной $str = "MyMegaClass";

существует класс-синглетон MyMegaClass, с приватным конструктором и методом Instance();

Как можно получить объект этого класса, если его имя есть только ввиде строки?
 

zarus

Хитрожопый макак
PHP:
<?php
class MyClass {
  private function __construct() {
    echo 'MyClass constructor';
  }
  public static function Instance() {
    static $instance = null;
    if ( null == $instance ) {
      $instance = new MyClass();
    }
    return $instance;
  }
}

$classname = 'MyClass';
if ( class_exists ( $classname ) ) {
  $obj = call_user_func(array($classname, 'Instance'));
}
?>
 

Balkon

Новичок
Сделал через рефлексию

$method = new ReflectionMethod($className, "Instance");
$obj = $method->Invoke(null);
 

tony2001

TeaM PHPClub
на самоме деле, reflection - это идеологически более верный способ.
 

tony2001

TeaM PHPClub
оставьте его в покое.
про php4 в новых проектах уже можно забыть, он остался для тех, кто по разным причинам не хочет или не может переходить на php5.
 

master_x

Pitavale XXI wieku
tony2001
reflection - это идеологически более верный способ
почему?
а что будет в данном конкретном случае быстрее: ReflectionMethod или call_user_func? вариант ответа типа "возьми да и проверь" не подходит, потому как спрашиваю просто из интереса.
 

tony2001

TeaM PHPClub
"рефлексия" - это немного другое.
"reflection" - рефлекшен, отражение.
 

SiMM

Новичок
> а что будет в данном конкретном случае быстрее: ReflectionMethod или call_user_func?
Пора бы уже отвыкнуть от глупых вопросов.

> вариант ответа типа "возьми да и проверь" не подходит
"Разница не существенна" устраивает?
 

whirlwind

TDD infected, paranoid
tony2001 Какой смысл отражения в скриптовом языке где в любое время доступно instanceof, get_class, __FUNCTION__, __CLASS__ (т.е. все что reflection дает низкоуровневым языкам)? Красиво обернуть call_user_func в тех исключительно редких случаях когда она нужна и назвать это выразительным словом?

Balkon у вас много сингельтонов? Может лучше сделать тулкит.
 

tony2001

TeaM PHPClub
whirlwind
смысл - сосредоточение всей однородной функциональности в одном месте.
 
Сверху