Моя попытка: Есть $getSomeData
функция в файле с именем bradpitt.php. Это простая функция. Который не внутри класса. Где у меня есть другое имя файла jolie.php. Этот файл имеет класс. Где я пытаюсь получить доступ $getSomeData()
в этом файле.
CoolPlugin.php
class CoolPlugin extends plugin
{
const COOLLIST = 'properties/coolBoy.json';
public function getSomeData () {
return DataUtil::readDataFile(self::COOLLIST);
}
bradpitt.php (Non Class File — простая функция)
$getSomeData = function(){
$plugin = new \simulator\CoolPlugin();
return $plugin->getSomeData();
};
jolie.php
include_once 'bradpitt.php';
class Jolie{
public $getSomeData;
public function __construct(){
global $getSomeData;
$this->$getSomeData();
}
}
output.php
include_once 'jolie.php';
$joiliePage = new Jolie();
var_dump($joiliePage->getSomeData);
ERROR:
Notice: Undefined variable: joiliePage in output.php on line 173
Notice: Trying to get property of non-object in output.php on line 173
**NULL**
Как вызвать и получить доступ к простой функции (с возвратом в качестве объекта) внутри другого класса в PHP?
Что я делаю не так, где возвращается NULL?
Код, который вы разместили, полон проблем.
var_dump($joiliePage->getSomeData);
ERROR:
Notice: Undefined variable: joiliePage in output.php on line 173
Notice: Trying to get property of non-object in output.php on line 173
**NULL**
Предполагая, что строка 173 — та, что перечислена выше, оба сообщения об ошибках сообщают одно и то же: переменная $joiliePage
не был инициализирован (и интерпретатор считает, что его значение NULL
).
Не обманывайтесь тем фактом, что PHP классифицирует их как «Уведомления». Это уведомления с точки зрения интерпретатора (он не может найти переменную), но они являются ошибками для вашего кода, поскольку он не может успешно продолжаться.
include_once 'bradpitt.php';
class Jolie{
public $getSomeData;
public function __contruct(){
global $getSomeData;
$this->$getSomeData()
}
}
Функция называется __contruct()
но вы, вероятно, хотите, чтобы это был класс » конструктор. Это не конструктор, и он не вызывается автоматически интерпретатором, потому что у него нет правильного имени. Имя конструктора __construct()
, Обратите внимание, что в середине есть буква «s», которая отсутствует в вашем коде.
Метод __contruct()
объявляет глобальную переменную $getSomeData
, Если файл bradpitt.php
успешно включен (может произойти сбой с предупреждением, не нарушая сценарий, если файл не существует), то $getSomeData
символ относится к переменной с тем же именем, определенной в файле bradpitt.php
,
Тем не менее, вызов $this->$getSomeData()
не относится к этой глобальной переменной. Он использует свойство класса с тем же именем, которое инициализируется. Этот код не будет работать.
Для вызова функции, хранящейся в глобальной переменной $getSomeData
код должен читать:
public function __construct(){
global $getSomeData;
$getSomeData();
}
Также обратите внимание, что в операторе отсутствует точка с запятой в конце и возникает синтаксическая ошибка. Неверное определение вашего класса, он не компилируется и объекты типа Jolie
не может быть создан.
Других решений пока нет …