79
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi có một classB kéo dài classA.
Trong cả classA và classB, tôi xác định phương pháp <?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Override parent's definition public function myFunc() { // But still call the parent function parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?> 1.and classB I define the method <?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Override parent's definition public function myFunc() { // But still call the parent function parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?> 1.
Trong <?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Override parent's definition public function myFunc() { // But still call the parent function parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?> 1 của classB, tôi muốn gọi <?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Override parent's definition public function myFunc() { // But still call the parent function parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?> 1 của classA ngay từ đầu.
Chỉ là cách tôi quen, từ Objective-C. Điều đó có thể trong PHP không? Và nếu vậy, làm thế nào?
Hỏi ngày 25 tháng 12 năm 2009 lúc 20:42Dec 25, 2009 at 20:42
0
parent::fooBar();
Trực tiếp từ hướng dẫn:
... Đại tràng kép, là một mã thông báo cho phép truy cập vào ... các thuộc tính hoặc phương thức ghi đè của một lớp.
...
Ví dụ #3 gọi phương thức của cha mẹ
<?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Override parent's definition public function myFunc() { // But still call the parent function parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?>
Mark Amery
133K78 Huy hiệu vàng395 Huy hiệu bạc443 Huy hiệu Đồng78 gold badges395 silver badges443 bronze badges
Đã trả lời ngày 25 tháng 12 năm 2009 lúc 20:44Dec 25, 2009 at 20:44
Chỉ là ai đó, ai đójust somebody
18.1k6 Huy hiệu vàng49 Huy hiệu bạc60 Huy hiệu Đồng6 gold badges49 silver badges60 bronze badges
Chỉ cần một lưu ý nhanh vì điều này không dễ dàng xuất hiện trên các tìm kiếm của Google và điều này được ghi lại rõ ràng trong các tài liệu PHP nếu bạn có thể tìm thấy nó. Nếu bạn có một lớp con cần gọi hàm tạo của siêu lớp, bạn có thể gọi nó bằng:
parent::__construct(); // since PHP5Một ví dụ sẽ là nếu siêu lớp có một số đối số trong hàm tạo của nó và nó đang thực hiện các lớp cần gọi đó là:
class Foo { public function __construct($lol, $cat) { // Do stuff specific for Foo } } class Bar extends Foo { public function __construct()( parent::__construct("lol", "cat"); // Do stuff specific for Bar } }Bạn có thể tìm thấy một ví dụ động lực hơn ở đây.
Đã trả lời ngày 9 tháng 9 năm 2010 lúc 5:20Sep 9, 2010 at 5:20
SpoikespoikeSpoike
Huy hiệu vàng 118K4343 gold badges137 silver badges158 bronze badges
2
2
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Xem xét mã lớp PHP sau
class SuperIdea{ . . . static function getById($id){ new SuperIdea(.......); } . . . . } class SubIdea extends SuperIdea{ }Vấn đề tôi gặp phải ở đây là khi tôi gọi Subidea :: getbyid ($ t); Đối tượng được trả về là loại superidea nhưng tôi muốn nó là của subidea. Có cách nào để đạt được nó mà không cần lặp lại mã trong subidea không?
Đã hỏi ngày 23 tháng 6 năm 2010 lúc 17:29Jun 23, 2010 at 17:29
Monkeastern Đông MonkEastern Monk
6.1758 Huy hiệu vàng44 Huy hiệu bạc61 Huy hiệu Đồng8 gold badges44 silver badges61 bronze badges
Thử thay thế <?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Override parent's definition public function myFunc() { // But still call the parent function parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?> 6 bằng <?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // Override parent's definition public function myFunc() { // But still call the parent function parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); ?> 7
Tôi chưa bao giờ thử nghiệm điều này, nhưng tôi thấy không có lý do tại sao nó không nên hoạt động ...
Đã trả lời ngày 23 tháng 6 năm 2010 lúc 17:36Jun 23, 2010 at 17:36
Ivar Bonsaksenivar BonsaksenIvar Bonsaksen
4.7092 Huy hiệu vàng31 Huy hiệu bạc34 Huy hiệu đồng2 gold badges31 silver badges34 bronze badges
2
Câu trả lời của Ivar (về cơ bản, để sử dụng get_called_class ()) hoạt động. Vui lòng nâng cấp/Chọn câu trả lời của anh ấy.
Bản demo nhanh:
<?PHP class supercls { static function foo(){ $class = get_called_class(); echo $class ."\n"; } } class subcls extends supercls { } supercls::foo(); subcls::foo();Đã trả lời ngày 23 tháng 6 năm 2010 lúc 17:38Jun 23, 2010 at 17:38
class SuperIdea { public $var; function __construct($var){ $this->var = $var; } static function getById($id){ return new static('foobar'); } } class SubIdea extends SuperIdea{} var_dump(SubIdea::getById(0));
Object (Subidea)#1 (1) {["var"] => String (6) "foobar"}
PHP> = 5.3
Đã trả lời ngày 23 tháng 6 năm 2010 lúc 17:56Jun 23, 2010 at 17:56
WrikkenWrikkenWrikken
67.7K8 Huy hiệu vàng94 Huy hiệu bạc135 Huy hiệu Đồng8 gold badges94 silver badges135 bronze badges