доступ к неклассовой функции внутри класса

Моя попытка: Есть $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?

0

Решение

Код, который вы разместили, полон проблем.

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 не может быть создан.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]