пара вопросов по ОО и классам в PHP - PullRequest
3 голосов
/ 11 сентября 2009

Я изучаю ОО и классы, у меня есть пара вопросов об ОО и классах в PHP

  1. Как я понимаю, класс, который расширяет другой класс, просто означает, что класс, который расширяет другой класс, имеет доступ к переменным / свойствам и функциям / методам класса, из которого он расширяется. Это правильно?

  2. Я знаю, что статический метод или свойство в основном совпадают с процедурной функцией или переменной вне класса и могут использоваться практически везде. Это правильно?

  3. Public означает, что любой класс может получить к нему доступ, а Private означает, что только тот класс, который инкапсулирован, или класс, расширенный от владельца, может получить к нему доступ и использовать. Это правильно?

Ответы [ 3 ]

11 голосов
/ 11 сентября 2009

1) Да, это правильно. Дочерний класс наследует любые protected или public свойства и методы своего родителя. Все объявленное private не может быть использовано.

2) Это правда. Пока класс загружен (это хорошо согласуется с вашим вопросом автозагрузки ранее), вы можете получить доступ к статическим методам через оператор разрешения области (: :), например: ClassName::methodName();

3) Вы правильно понимаете значение public, но, как я упоминал ранее, методы private могут использоваться только тем классом, в котором они объявлены.

class parentClass
{
     private $x;
     public $y;
}

class childClass extends parentClass
{    
    public function __construct() {
        echo $this->x;
    }
}

$z = new childClass();

Приведенный выше код приведет к ошибке NOTICE, так как $ x недоступен childClass.

Примечание: неопределенное свойство: ChildClass :: $ х

Если бы вместо этого было объявлено protected, то childClass будет иметь доступ. Редактировать: свойство, объявленное как protected, доступно классу, который его объявляет, и любым дочерним классам, которые его расширяют, но не «внешнему миру» в противном случае. Это хорошее промежуточное звено между public и private.

0 голосов
/ 11 сентября 2009

Для 1. Как я понимаю, класс, который расширяет другой класс, просто означает, что класс, который расширяет другой класс, имеет доступ к переменным / свойствам и функциям / методам класса, из которого он расширяется. Это правильно?

ANS: Это верно, но это еще не все. Расширяющий класс также может настраивать расширенный класс, переопределяя метод расширенного класса. И, конечно, он также может расширять функциональность суперкласса, добавляя новые поля и методы.

Для 2. Я знаю, что статический метод или свойство в основном совпадают с процедурной функцией или переменной вне класса и могут использоваться практически везде. Это правильно?

ANS: Да, это правильно и, как сказал зомбат, пока класс общедоступен и загружен, а свойство и метод общедоступны. Другими словами, вы используете класс в качестве пространства имен этих элементов.

Для 3. Public означает, что любой класс может получить к нему доступ, а Private означает, что только тот класс, который инкапсулирован, или класс, расширенный от владельца, может получить к нему доступ и использовать. Это правильно?

ANS: Думайте об этом как о физических свойствах, общедоступный компьютер (в библиотеке) может использоваться всеми, а ваш частный компьютер (предположительно) может использоваться только вами.

Просто добавлено в комментарий Zambat.

0 голосов
/ 11 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...