В этом проблема, как я могу вызвать переменную класса из функции класса? Позвольте мне объяснить лучше:
<?php
class Mine
{
private $g = 'gg';
const COSTANTE = 'valo';
public static function sayHello()
{
echo self::COSTANTE;
echo '<br>';
echo $this->g;
}
}
$h = new Mine();
$h->sayHello();
$h::sayHello();
?>
когда я запускаю это, он просто печатает константу COSTANTE …. Почему он не печатает переменную g?
Включить отчет об ошибках ( сообщение об ошибке (E_ALL); ), и вы должны получить следующую ошибку:
Неустранимая ошибка: использование $ this, когда не в контексте объекта
Псевдо-переменная $this
является ссылкой на вызывающий объект и доступна из контекста объекта.
self
используется для доступа к текущему классу, поскольку статические функции могут вызываться без фактического экземпляра объекта, когда метод вызывается статически $this
Ссылка не существует.
Метод объявлен как static
доступ к нему можно получить с помощью экземпляра объекта класса (но он всегда выполняется в статическом контексте), свойство объявлено как static
не могу.
valo
будет напечатан, но gg
и не будет.
Проблема заключается в том, что вы использовали нестатическую переменную в статическом методе, который вызовет ошибку FATAL и остановит выполнение. Это потому, что нет контекста объекта.
Не рекомендуется использовать нестатические переменные внутри статических методов, но, если вам нужно использовать их, вам сначала нужно создать объект.
Ваш sayHello
функция будет что-то вроде
public static function sayHello()
{
echo self::COSTANTE;
echo '<br>';
$mineObject = new Mine;
echo $mineObject->g;
}
Я также предложу держать отчеты об ошибках и отображать ошибки во время разработки, чтобы вы могли лучше понять, что там происходит.
error_reporting(E_ALL);
ini_set('display_errors', 'ON');