ООП получить переменную

Борис-ka

Добрый день!
Подскажите, пожалуйста, как получить значение переменной из protected функции.

Код (Text):
  1. MyClass{
  2.    protected function MyFunction(){
  3.          $asd = 5;
  4.      }
  5. }
 

MouseZver

PHP:
  1. MyClass{
  2.    protected function MyFunction(): int{
  3.          return 5;
  4.      }
  5. }
PHP:
  1. $c = new MyClass;
  2.  
  3. 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:
  1. <?php
  2.  
  3. class A
  4. {
  5.     public ?int $F;
  6.    
  7.     public function __construct( int $int = null )
  8.     {
  9.         $this -> test_1( $int );
  10.     }
  11.    
  12.     protected function test_1( ?int $int ): void
  13.     {
  14.         $this -> F = $int;
  15.        
  16.         // code
  17.     }
  18.    
  19.     public function get_F()
  20.     {
  21.         global $F;
  22.        
  23.         $F = $this -> F;
  24.     }
  25.    
  26.     // другие функции…
  27. }
  28.  
  29. // этот вызов тебе не доступен, нужно лесть в либы…
  30. $a = new A( 666 );
  31. // другие функции…
  32.  
  33.  
  34.  
  35.  
  36. // Затем я создам экземпляр класса и помещу эту public переменную в global
  37. $b = new A;
  38.  
  39. $b -> get_F();
  40.  
  41. echo $F;

— Добавлено —
вердикт один — пусть автор зубрит основы ооп и не крутит велосипеды, причем заднее колесо вместо руля

 

Sail

Явно написать в методе присвоение. И всегда об этом помнить при обновлениях :D
— Добавлено —
И направить автору плагина задание на доработку…

 

mkramer

Не меняя, нельзя. Вообще, надо сначала подучить основы. Ты тут такое пишешь… Локальная переменная существует только пока выполняется метод.

 

Борис-ka

Всем спасибо за ответы.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *