Подтвердить что ты не робот

Когда я должен объявлять переменные в классе PHP?

Я новичок в парадигме ООП, поэтому, возможно, простое объяснение этого вопроса...

Вам всегда нужно объявлять общедоступные объектные переменные в классе? Например:

<?php

class TestClass
{
    var $declaredVar;

    function __construct()
    {
        $this->declaredVar = "I am a declared variable.";
        $this->undeclaredVar = "I wasn't declared, but I still work.";
    }

    function display()
    {
        echo $this->declaredVar . "<br />";
        echo $this->undeclaredVar;
        echo "<br /><br />"; 
    }
}

$test = new TestClass;
$test->display();

$test->declaredVar = "The declared variable was changed.";
$test->undeclaredVar = "The undeclared variable was changed.";

$test->display();

?>

В этом коде, даже если $declaredVar является единственной объявленной переменной, $undeclaredVar является такой же доступной и полезной - кажется, что я объявляю ее общедоступной.

Если необъявленные переменные класса всегда доступны таким образом, то какой смысл объявлять их все впереди?

4b9b3361

Ответ 1

Эта переменная не является неинициализированной, она просто не объявлена.

Объявление переменных в определении класса является точкой стиля для удобочитаемости. Кроме того, вы можете установить доступность (закрытую или общедоступную).

В любом случае, объявление переменных явно не имеет ничего общего с ООП, это зависит от языка программирования. В Java вы не можете этого сделать, потому что переменные должны быть явно объявлены.

Ответ 2

Если вы объявляете члена внутри класса, вы можете установить его доступность, например,

private $varname;

Ответ 3

Вы всегда должны объявлять переменные-члены и указывать их доступность в своих классах. Мне нравится передавать эту информацию в конце класса после моих функций.

Вы должны определить их, как только у вас будет достаточно информации для этого. Возможно, в конструкторе или через функции setter.

Это важно сделать, потому что это облегчает жизнь людям, работающим с вашим кодом. Им не нужно догадываться, откуда берутся разные свойства или почему они там. Кроме того, большинство (если не все) IDE не будут подбирать переменные класса, если вы их не объявили. Кодовое завершение/подсказки - одно из многих преимуществ IDE и без объявления ваших переменных, вы окажете эту функцию бесполезно.

Ответ 4

Общая парадигма инкапсуляции OOP говорит о том, что вы не должны раскрывать свои внутренние переменные состояния, что означает, что они должны быть частными, что позволяет вам изменить реализацию вашего класса без необходимости изменять код, в котором вы его используете. Лучше практиковать инициализацию переменных с помощью конструкторов, метода getters и seters класса.

Ответ 5

В общем случае переменные должны быть инициализированы, как только у вас будет достаточно информации, чтобы сделать это правильно.

Если переменная класса нуждается в определенном значении, то информация должна быть передана конструктору.

Используя синтаксис PHP для неявного объявления переменных в точке определения, IMHO - верный способ введения ошибок - если ваш класс нуждается в переменной, тогда объявите его и используйте всю информацию, скрывающуюся от того, что ООП предоставляет вам.

Ответ 6

Как сказал Федерико Куллока: "Эта переменная не является неинициализированной, она просто необъявленная". Также вы не определили для них никаких модификаторов доступа, чтобы они применяли их к публичному модификатору.

Возможно, вы уже знали. PHP - это свободно типизированный язык. Но программист должен всегда следовать лучшим практикам (но не использовать примитивные типы данных в php).

Вы должны использовать частный модификатор для переменных уровня класса и предоставить им методы доступа и мутатора (Getters and Setters).