Неопределенная переменная Попытка получить свойство класса необъектных элементов

0

У меня проблемы с классом в php

class one{
     public $value;
}

Вызов

$workone = new one();

Второй класс

class two{
     function working(){
        $value = $workone->value;
     }
}

Я получаю эту ошибку:

Неопределенная переменная: workone in/xxx/xxxx/xxx on line x

Попытка получить свойство не-объекта в /xxx/xxxx/xxx в строке x

  • 0
    Это потому, что переменная находится вне области видимости!
Теги:
class
elements

4 ответа

0
Лучший ответ

Вот как бы я это сделал.

Используя инъекцию зависимостей!

class one{
     public $value;
}
class two{
     private $workone;
     function __construct(One $workone){
        $this->workone = $workone;
     }
     function working(){
        $value = $this->workone->value;
     }
}

$workone = new one();
$worktwo = new two($workone);
$worktwo->working();
0

Вы должны прочитать о сфере! Вы пытаетесь получить доступ к переменной, которая была определена вне метода, working класса two и эта переменная wasnt определена как глобальная переменная.

Но иногда, объявляйте переменную, поскольку глобальный может принести вам больше проблем. Так что мой совет передать переменную в качестве аргумента ваш метод working...

class two{
      function working($workone){
              $value = $workone->value;
      }
}

или определить переменную $ workone внутри используемого метода, если она соответствует вашим потребностям. Более важно, чем получить решение, - это понять решение. Пожалуйста, прочитайте больше о сфере:

http://php.net/manual/en/language.variables.scope.php

0

Вам нужно использовать глобальное ключевое слово. Используйте приведенный ниже код

class two{ 
function working(){ 
global $workone;
$value = $workone->value; 
} 
}

Надеюсь, это поможет вам

  • 0
    Это плохая практика использовать global !
  • 0
    @ Rizier123 я знаю .. но это можно использовать для этого
Показать ещё 3 комментария
0

Вы можете работать с наследованием, значение свойства $value в классе 1 будет содержать myValue если вы реализуете под кодом.

class one {
  protected $value;
}

class two extends one {
  public function working($value){
     $this->value = $value;
  }
}

$classTwo = new two();
$classTwo->working('myValue');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню