Получить свойство класса PHP по строке - PullRequest
124 голосов
/ 30 апреля 2009

Как мне получить свойство в PHP на основе строки? Я назову это magic. Так что же такое magic?

$obj->Name = 'something';
$get = $obj->Name;

было бы как ...

magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');

Ответы [ 12 ]

0 голосов
/ 30 апреля 2009

Вот моя попытка. В него встроены некоторые общие проверки «глупости», позволяющие убедиться, что вы не пытаетесь установить или получить участника, который недоступен.

Вы можете переместить эти проверки 'property_exists' в __set и __get соответственно и вызывать их напрямую в magic ().

<?php

class Foo {
    public $Name;

    public function magic($member, $value = NULL) {
        if ($value != NULL) {
            if (!property_exists($this, $member)) {
                trigger_error('Undefined property via magic(): ' .
                    $member, E_USER_ERROR);
                return NULL;
            }
            $this->$member = $value;
        } else {
            if (!property_exists($this, $member)) {
                trigger_error('Undefined property via magic(): ' .
                    $member, E_USER_ERROR);
                return NULL;
            }
            return $this->$member;
        }
    }
};

$f = new Foo();

$f->magic("Name", "Something");
echo $f->magic("Name") , "\n";

// error
$f->magic("Fame", "Something");
echo $f->magic("Fame") , "\n";

?>
0 голосов
/ 30 апреля 2009
$classname = "myclass";
$obj = new $classname($params);

$variable_name = "my_member_variable";
$val = $obj->$variable_name; //do care about the level(private,public,protected)

$func_name = "myFunction";
$val = $obj->$func_name($parameters);

зачем редактировать: до: используя eval (зло) после: нет оценки вообще. быть старым на этом языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...