Hướng dẫn php override abstract class method - php ghi đè phương thức lớp trừu tượng

Tôi nghĩ rằng có một vấn đề trong việc thực hiện OOP của PHP.

Chỉnh sửa: Xem xét ví dụ minh họa hơn: Consider more illustrative example:

abstract class Animal {

    public $name;

    // public function Communicate(Animal $partner) {}     // Works
    public abstract function Communicate(Animal $partner); // Gives error
}

class Panda extends Animal {

    public function Communicate(Panda $partner) {
        echo "Hi {$partner->name} I'm a Panda";
    }

}

class Human extends Animal {

    public function Communicate(Human $partner) {
        echo "Hi {$partner->name} I'm a Human";
    }

}

$john = new Human(); $john->name = 'John';
$mary = new Human(); $mary->name = 'Mary';
$john->Communicate($mary); // should be ok

$zuzi = new Panda(); $zuzi->name = 'Zuzi';
$zuzi->Communicate($john); // should give error

Vấn đề là khi động vật :: Giao tiếp là một phương pháp trừu tượng, PHP nói rằng các phương pháp sau là bất hợp pháp:

"Truyền thông chức năng công cộng (Panda $ Đối tác)" "Chức năng công cộng Giao tiếp (Đối tác $ của con người)"

Nhưng khi Animal :: Giao tiếp là không Abstract nhưng không thực hiện php không thực hiện rằng các phương pháp này là hợp pháp. Vì vậy, theo ý kiến ​​của tôi, nó không đúng vì chúng tôi đang ghi đè trong cả hai trường hợp và cả hai trường hợp này đều bằng nhau, vì vậy có vẻ như đó là một lỗi ...

Phần cũ của bài viết:

Vui lòng xem xét mã sau:

Framework.php

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}

Implementation.php

namespace B
{
    class MyComponent extends \A\Component { ... }
}

MyDecorator.php

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}

Mã sau đây gây ra lỗi trong MyDecorator.php TellingMyDecorator.php telling

Lỗi gây tử vong: Tuyên bố của MyDecorator :: Trang trí () phải tương thích với A \ Decorator :: Trang trí () trong MyDecorator.php On Line ...

Nhưng khi tôi thay đổi khung.php :: Lớp trang trí thành triển khai sau:

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }

Vấn đề biến mất.

PHP có các lớp và phương pháp trừu tượng. Các lớp được xác định là trừu tượng không thể được khởi tạo và bất kỳ lớp nào chứa ít nhất một phương pháp trừu tượng cũng phải là trừu tượng. Các phương thức được định nghĩa là trừu tượng chỉ đơn giản là khai báo chữ ký của phương thức; Họ không thể xác định việc thực hiện.

Khi kế thừa từ một lớp trừu tượng, tất cả các phương pháp được đánh dấu trừu tượng trong tuyên bố lớp của phụ huynh phải được xác định bởi lớp con và tuân theo các quy tắc tương thích kế thừa và chữ ký thông thường.

Ví dụ #1 Lớp trừu tượng ví dụ

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}

class

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>

Ví dụ trên sẽ xuất ra:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Ví dụ #2 Ví dụ về lớp trừu tượng

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
0

class

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
2

Ví dụ trên sẽ xuất ra:

Ví dụ #2 Ví dụ về lớp trừu tượng

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
2

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
3

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
4

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
5

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
6

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
7

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
8

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
9

namespace B
{
    class MyComponent extends \A\Component { ... }
}
0

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

Ironiridis tại gmail dot com ¶

14 năm trước

namespace B
{
    class MyComponent extends \A\Component { ... }
}
2

namespace B
{
    class MyComponent extends \A\Component { ... }
}
3

namespace B
{
    class MyComponent extends \A\Component { ... }
}
4

namespace B
{
    class MyComponent extends \A\Component { ... }
}
5

mbajoras tại gmail dot com ¶

12 năm trước

namespace B
{
    class MyComponent extends \A\Component { ... }
}
6

namespace B
{
    class MyComponent extends \A\Component { ... }
}
7

namespace B
{
    class MyComponent extends \A\Component { ... }
}
8

namespace B
{
    class MyComponent extends \A\Component { ... }
}
9

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
0

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
1

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
2

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

Một dot tsiaparas tại watergate dot gr ¶

11 năm trước

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
4

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
5

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
6

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
7

Jai tại hình Dot CA ¶

12 năm trước

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
8

Một dot tsiaparas tại watergate dot gr ¶

11 năm trước

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
9

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
0

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
1

Jai tại hình Dot CA ¶

11 năm trước

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
2

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
3

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
4

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
5

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
6

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
7

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
0

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
9

Jai tại hình Dot CA ¶

5 năm trước

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
0

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
1

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
2

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
3

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

Một dot tsiaparas tại watergate dot gr ¶

11 năm trước

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
5

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
6

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
7

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
6

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
9

Jai tại hình Dot CA ¶

5 năm trước

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
0

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
1

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
2

Joelhy ¶

14 năm trước

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
3

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
4

    abstract class Decorator {
        public function Decorate(\A\Component $component) {}
    }
0

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
6

mbajoras tại gmail dot com ¶

12 năm trước

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
7

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
6

abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}
9

Một dot tsiaparas tại watergate dot gr ¶

12 năm trước

class0

class1

class2

class3

class4

class5

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

Một dot tsiaparas tại watergate dot gr ¶

5 năm trước

class7

class8

class9

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
0

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
1

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

Joelhy ¶

Shaman_master tại danh sách dot ru ¶

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
3

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
4

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
5

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

4 năm trước

swashata4u tại gmail dot com ¶

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
7

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
8

ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class

ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function

prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>
9

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
0

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

lén lút tại hotmail dot com

12 năm trước

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
2

Một dot tsiaparas tại watergate dot gr ¶

14 năm trước

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
3

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
4

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
6

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
6

mbajoras tại gmail dot com ¶

swashata4u tại gmail dot com ¶

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
7

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
8

abstract class AbstractClass
{
    
// Our abstract method only needs to define the required arguments
    
abstract protected function prefixName($name);
9

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
00

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
01

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
02

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
03

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
04

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
05

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
06

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

lén lút tại hotmail dot com

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
2

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
08

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
09

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
10

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
11

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
12

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
13

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
14

Ironiridis tại gmail dot com ¶

14 năm trước

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
15

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
16

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
17

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
18

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
19

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
20

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
21

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
22

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
17

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
24

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
0

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
26

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
27

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
17

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
29

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
30

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

mbajoras tại gmail dot com ¶

Shaman_master tại danh sách dot ru ¶

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
32

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
33

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
34

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
35

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
36

4 năm trước

14 năm trước

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
37

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
6

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
39

mbajoras tại gmail dot com ¶

14 năm trước

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
40

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
41

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
42

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
43

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
44

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
45

namespace B
{
    class MyComponent extends \A\Component { ... }
}
1

mbajoras tại gmail dot com ¶

12 năm trước

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
47

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
48

namespace A
{
    class MyDecorator extends Decorator {
        public function Decorate(\B\MyComponent $component) { ... }
    }
}
6

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
50

Một dot tsiaparas tại watergate dot gr ¶

12 năm trước

namespace A
{
    class Component { ... }

    abstract class Decorator {
        public abstract function Decorate(\A\Component $component);
    }
}
51

Chúng ta có thể ghi đè phương thức trừu tượng trong PHP không?

Một lớp con không phải là lớp con của một lớp cha mẹ trừu tượng phải ghi đè từng phương pháp trừu tượng của cha mẹ. Một đứa trẻ không Abstract phải ghi đè từng phương thức trừu tượng được kế thừa từ cha mẹ của nó bằng cách xác định một phương thức có cùng chữ ký và cùng loại trả về.. A non-abstract child must override each abstract method inherited from its parent by defining a method with the same signature and same return type.

Phương pháp ghi đè trong PHP là gì?

Trong chức năng ghi đè, cả hai lớp cha và con nên có cùng tên hàm và số lượng đối số.Nó được sử dụng để thay thế phương pháp cha mẹ trong lớp con.Mục đích của việc ghi đè là thay đổi hành vi của phương pháp lớp cha.Hai phương thức có cùng tên và cùng một tham số được gọi là ghi đè.used to replace parent method in child class. The purpose of overriding is to change the behavior of parent class method. The two methods with the same name and same parameter is called overriding.

Chúng ta có thể kế thừa lớp trừu tượng trong PHP không?

Khi kế thừa từ một lớp trừu tượng, phương thức lớp con phải được xác định cùng tên và cùng một công cụ sửa đổi truy cập bị hạn chế.Vì vậy, nếu phương thức trừu tượng được định nghĩa là được bảo vệ, phương pháp lớp con phải được định nghĩa là được bảo vệ hoặc công khai, nhưng không riêng tư.. So, if the abstract method is defined as protected, the child class method must be defined as either protected or public, but not private.

Ghi đè lớp trừu tượng là gì?

Để thực hiện các tính năng của một lớp trừu tượng, chúng tôi thừa hưởng các lớp con từ nó và tạo các đối tượng của lớp con.Một lớp con phải ghi đè tất cả các phương thức trừu tượng của một lớp trừu tượng.Tuy nhiên, nếu lớp con được tuyên bố trừu tượng, không bắt buộc phải ghi đè các phương thức trừu tượng.A subclass must override all abstract methods of an abstract class. However, if the subclass is declared abstract, it's not mandatory to override abstract methods.