Я запрашиваю для идентификатора поля путем доступа к функции класса, которую кто-то уже поместил на месте. Результатом является объект, возвращенный с защищенными членскими переменными. Я изо всех сил пытаюсь видеть, как я могу получить доступ к членским значениям переменных вне класса.
Просто добавьте метод "get" в класс.
class Foo
{
protected $bar = 'Hello World!';
public function getBar()
{
return $this->bar;
}
}
$baz = new Foo();
echo $baz->getBar();
Доступ к защищенным или частным переменным из общедоступных является неправильным (поэтому они являются защищенными или частными). Так что лучше расширить класс и получить доступ к требуемому свойству или создать метод получения, чтобы сделать его общедоступным. Но если вы все еще хотите получить свойства без расширения и если вы используете PHP 5, вы можете получить доступ с помощью классов Reflection . На самом деле попробуйте класс ReflectionProperty .
class Foo { protected $bar; }
$foo = new Foo();
$rp = new ReflectionProperty('Foo', 'bar');
$rp->setAccessible(true);
echo $rp->getValue($foo);
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не помню, как программировать. Прошло много времени". Это может быть полностью выключено.
Ну, во-первых, если участники защищены, первоначальный разработчик не предполагал, что вы будете иметь к ним прямой доступ. Вы проверяли методы доступа?
Если их нет и вы убеждены, что вам действительно нужны эти защищенные члены, вы можете расширить тип с помощью методов доступа, привести их и получить их таким образом. Как (в C ++ - подобном коде)
class MyClass : public OldClass
{
public:
int getSomeValue() { return protectedValue; }
void setSomeValue(int value) { protectedValue=value; }
char* getOtherValue() { return otherProtectedValue; }
}
, а затем использовать его
MyClass* blah = (MyClass*)TheirFactory->GiveMeAClass();
int yay=blah->getSomeValue();
Вы получаете дрейф. Надеюсь, это сработает для вас, Internet Explorer создает паршивый компилятор, поэтому я не смог его протестировать. }
I ' m изо всех сил пытается понять, как я могу получить доступ к значениям переменных-членов вне класса.
Вы не можете: в этом весь смысл protected
.
Вам нужно расширить
класс с помощью метода, который извлекает переменные за вас.
Вы не можете сделать это с экземпляром объекта - вам придется либо повлиять на определение класса, либо изменить класс объекта в точке его создания.
Если вам действительно нужно это значение:
Очевидно, разработчик класса не думал, что вам понадобится значение, к которому вы пытаетесь получить доступ, иначе он бы сам добавил метод для его получения. Поэтому пересмотрите то, что вы делаете.