У меня есть класс и внутри я инициализирую некоторые переменные. Я устанавливаю первую переменную в 100
а затем я хочу использовать ее для следующих нескольких переменных.
Моя IDE дает следующую ошибку, и код не печатает мою переменную:
syntax error, unexpected '$defaultWidthHeight' (T_VARIABLE)
Не работает:
class generateRandomThumbnails
{
private $defaultWidthHeight = 100;
private $width = $defaultWidthHeight; // This is not allowed?
private $height = $defaultWidthHeight; // This is not allowed?
public function echoTest(){
return $this->height;
}
}
Результат: ничего!
Работает:
class generateRandomThumbnails
{
private $defaultWidthHeight = 100;
private $width = 100; // This is allowed.
private $height = 100; // This is allowed.
public function echoTest(){
return $this->height;
}
}
Выход: 100
Как я называю функцию: (я не думаю, что это имеет отношение к моему примеру, но включено в случае, если я делаю что-то не так)
<?php
require_once 'generateRandomThumbnail.php';
$image = new generateRandomThumbnail();
$test = $image->echoTest();
echo $test;
?>
Вы не можете назначать "динамические" значения для свойства класса в объявлении класса. Вы можете назначить, как вы сделали 100 для каждого свойства, или сделать это в конструкторе, как вы сказали в комментариях.
Дополнительные сведения о свойствах класса см. В руководстве: http://php.net/manual/en/language.oop5.properties.php
И цитата оттуда:
Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением --that, она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.
Основываясь на Rizier123, John Conde и Dvir Azulay, есть два основных способа достижения этого:
Используйте конструктор:
class generateRandomThumbnail
{
private $defaultWidthHeight = 150;
private $width = 0;
private $height = 0;
function __construct(){
$this->width = $this->defaultWidthHeight;
$this->height = $this->defaultWidthHeight;
}
public function echoTest(){
return $this->height;
}
}
Используйте константу:
class generateRandomThumbnail
{
const DEFAULT_SIZE = 150;
private $width = self::DEFAULT_SIZE;
private $height = self::DEFAULT_SIZE;
public function echoTest(){
return $this->height;
}
}