Переменные PHP, использующие другие переменные в качестве начального значения в классе

0

У меня есть класс и внутри я инициализирую некоторые переменные. Я устанавливаю первую переменную в 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;
?>
  • 1
    Нет, это не разрешено.
  • 0
    @JohnConde, Хорошо, спасибо, я думаю, что правильное, что нужно сделать, это использовать функцию конструктора для заполнения всех значений инициализируемого объекта.
Показать ещё 1 комментарий
Теги:
class

2 ответа

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

Вы не можете назначать "динамические" значения для свойства класса в объявлении класса. Вы можете назначить, как вы сделали 100 для каждого свойства, или сделать это в конструкторе, как вы сказали в комментариях.

Дополнительные сведения о свойствах класса см. В руководстве: http://php.net/manual/en/language.oop5.properties.php

И цитата оттуда:

Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением --that, она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.

0

Основываясь на 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;
    }
}

Ещё вопросы

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