Tôi đang sử dụng PHP 5.3 ổn định và đôi khi gặp phải hành vi rất không nhất quán. Theo tôi biết, trong tính kế thừa, tất cả các thuộc tính và phương thức (riêng tư, công khai và được bảo vệ) trong siêu lớp đều được truyền cho lớp con.
lớp học
{
riêng tư $_name = "foo";
}
Thanh lớp mở rộng Foo
{
hàm công khai getName()
{
trả lại $this->_name;
}
}
$o = Thanh mới();
echo $o->getName();
//Lưu ý: Thuộc tính không xác định: Bar::$_name trong ...\test.php trên dòng 11
Nhưng khi thuộc tính Foo::$_name được xác định là "công khai", nó không báo lỗi. PHP có quy tắc OO riêng không? ? ?
Cảm ơn
biên tập:Bây giờ mọi thứ đã rõ ràng. Thực ra, tôi đang nghĩ đến việc "kế thừa", tạo ra một lớp mới và kế thừa tất cả các thành viên một cách độc lập với tổ tiên của nó. Tôi không biết rằng quy tắc "truy cập" và quy tắc kế thừa là như nhau.
biên tậpDựa trên nhận xét của bạn, đoạn mã này sẽ có lỗi. Nhưng nó đang hoạt động.
lớp học
{
riêng $bar = "baz";
chức năng công cộng getBar()
{
trả về $this->bar;
}
}
Thanh lớp mở rộng Foo
{}
$o = Thanh mới;
echo $o->getBar();
từ Hướng dẫn sử dụng PHP :
Khả năng hiển thị của một thuộc tính hoặc phương thức có thể được xác định bằng cách thêm từ khóa vào trước phần khai báo công cộng
, protected
or riêng tư
Các thành viên .Class đã khai báo công cộng
có thể được truy cập ở khắp mọi nơi. protected
chỉ có thể được truy cập trong chính lớp đó và bởi các thành viên được kế thừa và lớp cha được khai báo là. riêng tư
chỉ có thể được truy cập bởi lớp xác định thành viên.
hạng A
{
public $prop1; // có thể truy cập từ mọi nơi
protected $prop2; // có thể truy cập được trong lớp này và lớp con
riêng $prop3; // chỉ có thể truy cập được trong lớp này
}
Không, điều này không khác gì các ngôn ngữ khác thực hiện cùng một từ khóa.
Về chỉnh sửa thứ hai và đoạn mã của bạn:
Không, điều này sẽ không gây ra lỗi vì getBar()
继承自 Foo
Và Foo
Phải $bar có khả năng hiển thị
. nếu ở Thanh
được xác định hoặc quá tải trong getBar()
, nó sẽ không hoạt động. Nhìn thấy http://codepad.org/rlSWx7SQ
Tôi là một lập trình viên xuất sắc, rất giỏi!