PHP: Получить экземпляр статического класса по строковому значению - PullRequest
4 голосов
/ 22 марта 2010

Я работаю над php web api, который был передан мне с большим количеством кода, который необходимо реорганизовать. Те, кто написал код, хотели включить класс статической конфигурации в ресурс API, а затем получить экземпляр этого класса примерно так:

<?php
$obj = "User";
$confObjectSuffix = "_conf";
$confObject = $obj.$confObjectSuffix;
if ($confObject::inst()->checkMethod($method)) {
.....

Это выдает ошибку «Ошибка разбора: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM in .....», поскольку $ confObject является строкой, а не объектом.

Я написал тестовый код:

<code><?php

$class = "User_conf";
echo "<pre>";
print_r($$class::Inst());
echo "
"; class User_conf { приватная статическая $ INSTANCE = null; публичная статическая функция Inst () { if (User_conf :: $ INSTANCE === null) { User_conf :: $ INSTANCE = new User_conf (); } return User_conf :: $ INSTANCE; } }

Но нельзя заставить его работать и с $$, есть ли другой способ обойти это? Я не хочу переписывать больше, чем нужно.

1 Ответ

6 голосов
/ 22 марта 2010

Вы можете использовать call_user_func для захвата экземпляра, а затем обработать его по мере необходимости:

$instance = call_user_func(array($confObject, 'inst'));

if($instance->checkMethod($method)) {
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...