Борис-ka
Добрый день!
Подскажите, пожалуйста, как получить значение переменной из protected функции.Код (Text):
MyClass{ protected function MyFunction(){ $asd = 5; } }
MouseZver
PHP:
MyClass{ protected function MyFunction(): int{ return 5; } }PHP:
$c = new MyClass; echo $c -> MyFunction();
Борис-ka
Спасибо. Но нужно получить значение переменной, не изменяя эту функцию.
MouseZver
в чем прикол ? логику в студию
Борис-ka
Есть плагин ELEMENTOR для вордпресс, там (protected) функция и внутри нее в переменную передаются данные произвольного поля. Нужно вытянуть данные из этой переменной, для применения на другой странице (т.к. данные повторяются).
MouseZver
return $переменная
не забудь что можно нарушить логику функции.
Борис-ka
В том то и дело, что можно нарушить. А другого способа обратиться к этой переменной не существует?
Sail
Продублируй её значение в публичном свойстве. Из него и бери. Можно в классе-наследнике.
mkramer
@Борис-ka, локальную переменную нельзя получить извне. Она на то и локальная. Тут ООП не причём даже. Переменные бывают глобальные и локальные. Локальные доступны только внутри одной функции, глобальные — по всей программе. В PHP для доступа к глобальным переменным используется специальное ключевое слово global
Борис-ka
Мне ее и нужно вытянуть в этот класс в public переменную. Затем я создам экземпляр класса и помещу эту public переменную в global. Но вот как ее изъять из protected метода, в этом и вопрос. И вообще можно ли так?
MouseZver
Ок.. лови.
http://sandbox.onlinephpfunctions.com/code/7ec59d84e9c5d443597064743bbfee6a95a7bc66
— Добавлено —PHP:
<?php class A { public ?int $F; public function __construct( int $int = null ) { $this -> test_1( $int ); } protected function test_1( ?int $int ): void { $this -> F = $int; // code } public function get_F() { global $F; $F = $this -> F; } // другие функции… } // этот вызов тебе не доступен, нужно лесть в либы… $a = new A( 666 ); // другие функции… // Затем я создам экземпляр класса и помещу эту public переменную в global $b = new A; $b -> get_F(); echo $F;— Добавлено —
вердикт один — пусть автор зубрит основы ооп и не крутит велосипеды, причем заднее колесо вместо руля
Sail
Явно написать в методе присвоение. И всегда об этом помнить при обновлениях
— Добавлено —
И направить автору плагина задание на доработку…
mkramer
Не меняя, нельзя. Вообще, надо сначала подучить основы. Ты тут такое пишешь… Локальная переменная существует только пока выполняется метод.
Борис-ka
Всем спасибо за ответы.