Я изучаю OO и классы, у меня есть пара вопросов об OO и классах PHP
Насколько я понимаю, класс, который расширяет другой класс, просто означает, что класс, который расширяет другой класс, имеет доступ к переменным / свойствам и функциям / методам класса, из которого он распространяется. Это верно?
Я знаю, что статический метод или свойство в основном такие же, как и процедурная функция или переменная вне класса, и могут использоваться практически везде. Это верно?
Публичный означает, что любой класс может получить к нему доступ, а Private означает, что доступ и использование только класса, который является инкапсулированным или класса, который распространяется от владельца доступа. Это верно?
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 :: $ x
Если вместо $ x было объявлено protected
, тогда у childClass
будет доступ. Изменить: свойство, объявленное как protected
, доступно классу, объявляющему его, и любым дочерним классам, которые его расширяют, но не к «внешнему миру» в противном случае. Это хорошее промежуточное звено между public
и private
.
Для 1. Как я понимаю, класс, который расширяет другой класс, просто означает, что класс, который расширяет другой класс, имеет доступ к переменным / свойствам и функциям / методам класса, из которого он распространяется. Это верно?
ANS: Это правильно, но это еще не все. Расширяющийся класс также может настраивать расширенный класс, переопределяя метод расширенного класса. Кроме того, он также может расширить функциональность суперкласса, добавив новые поля и методы.
Для 2. Я знаю, что статический метод или свойство в основном такие же, как и процедурная функция или переменная вне класса, и могут использоваться практически везде. Это верно?
ANS: Да, это правильно, и, как сказал zombat, пока класс является открытым и загруженным, а свойство и метод являются общедоступными. Другими словами, вы используете класс как пространство имен этих элементов.
Для 3. Общественных означает, что любой класс может получить к нему доступ, а Частный означает, что доступ и использование только класса, который является инкапсулированным или класса, который распространяется от владельца доступа. Это верно?
ANS: Думайте об этом как о физических свойствах, общедоступный компьютер (в библиотеке) может использоваться всеми, а ваш частный компьютер (предположительно) может использоваться вами только вами.
Просто добавьте комментарий в Замбат.
Существует очень мало необходимости объявлять что-либо частным, поскольку вместо этого используется общее правило.