Hướng dẫn php override parent property - php ghi đè thuộc tính mẹ

Vấn đề là bạn đang cố gắng làm điều gì đó theo cách mà nó hoàn toàn không phải là phải thực hiện. Có một chút khó khăn để nói những gì bạn đang cố gắng làm nhưng hy vọng nếu bạn nhìn vào mẫu của tôi, nó sẽ cho bạn thấy những gì đang xảy ra:

option=array(1,2,3);
        /* We are in the base class so the reset() method doesn't exist yet.
         * This fails in this class: */
        // $this->reset();
    }
    /** Print the $option variable. */
    public function dump() {
        echo sprintf('
%s = ', get_class($this));
        print_r($this->option);
        echo "
\n"; } } class DerivedClass extends BaseClass { public function __construct() { parent::__construct(); /* We have complete control over the variable BaseClass::$option from this class. * If we want to we can even make it a string instead of an array. */ $this->option="I've overridden the option property."; } /** Reset the BaseClass::$option variable. */ public function reset() { $this->option=array(1,2,3,4); } } /// Create a few test objects to play with $objBase=new BaseClass(); $objDerived=new DerivedClass(); $objBase->dump(); // Display the base object data /// If BaseClass::$option is public you can edit it directly here. /// This may be easier but it is discouraged because it breaks OOP principals. //$objDerived->option[]=5; $objDerived->dump(); // Display the derived object data $objDerived->reset(); // call a method which will change our data $objDerived->dump(); // Display the derived object data again now

Các lớp đưa ra nhiều cách để kiểm soát hơn nữa những gì có thể được nhìn thấy bởi các lớp đó có nguồn gốc từ lớp hiện tại và bên ngoài. Điều này được thực hiện bằng cách sử dụng các từ khóa công khai, được bảo vệ và riêng tư. Khi được đặt thành công khai, các phương thức và thuộc tính có thể nhìn thấy cho mọi thứ nhưng chúng vẫn có thể nằm ngoài phạm vi. Nói tóm lại, vấn đề duy nhất bạn gặp phải là phương pháp B: AA () của bạn đã nằm ngoài phạm vi trong A :: BB ().

Hãy nhớ rằng trong thực tế Baseclass có thể không nằm trong cùng một tệp như DerivingClass và một số dự án có thể không cần DerivingClass. Nếu bạn ghi nhớ điều đó, điều đó có ý nghĩa rằng bạn không thể sử dụng các phương thức thậm chí không được tải vào dự án.

Trong mã của bạn, bạn đang thực hiện một ví dụ hoàn toàn mới của B trong phương thức A :: BB (). Đây là một mẫu thiết kế mà bạn gần như sẽ không bao giờ thấy ngoại trừ trong một vài loại chức năng cụ thể (được gọi là chức năng nhà máy vì chúng có nghĩa là để tạo các lớp có nguồn gốc từ trong một lớp cơ sở có mục đích). Tôi khá chắc chắn rằng đó không phải là những gì bạn đang làm ở đây vì đó không phải là điều bạn làm trong PHP rất thường xuyên vì PHP thường không đọc dữ liệu lớp nhị phân từ các tệp và trong các tình huống khác thường có những cách tốt hơn để hoàn thành công việc.

Ẩn danh ¶

6 năm trước

Egingell tại Sisna Dot Com ¶

Ghi chú::

15 năm trước

Ghi chú::

Pogregoire ## Live.fr ¶

Quá tải tài sản

public__set (Chuỗi $name, hỗn hợp $value): VOID __set(string $name, mixed $value): void

public__get (chuỗi $name): hỗn hợp __get(string $name): mixed

public__isset (chuỗi $name): bool __isset(string $name): bool

công khai__unset (chuỗi $name): VOID __unset(string $name): void

__set () được chạy khi viết dữ liệu thành các thuộc tính không thể truy cập (được bảo vệ hoặc riêng tư) hoặc không tồn tại.

__get () được sử dụng để đọc dữ liệu từ các thuộc tính không thể truy cập (được bảo vệ hoặc riêng tư) hoặc không tồn tại.

__isset () được kích hoạt bằng cách gọi isset () hoặc trống () trên các thuộc tính không thể truy cập (được bảo vệ hoặc riêng tư) hoặc không tồn tại.isset() or empty() on inaccessible (protected or private) or non-existing properties.

__unset () được gọi khi unset () được sử dụng trên các thuộc tính không thể tiếp cận (được bảo vệ hoặc riêng tư) hoặc không tồn tại.unset() is used on inaccessible (protected or private) or non-existing properties.

Đối số $ name là tên của tài sản đang được tương tác. Đối số giá trị $ của phương thức __set () Chỉ định giá trị thuộc tính $ name'ed phải được đặt thành.

Thuộc tính quá tải chỉ hoạt động trong bối cảnh đối tượng. Các phương pháp ma thuật này sẽ không được kích hoạt trong bối cảnh tĩnh. Do đó, các phương pháp này không nên được tuyên bố tĩnh. Một cảnh báo được đưa ra nếu một trong những phương pháp quá tải ma thuật được khai báo

 $a = $obj->b = 8; 
0.

Ghi chú::

Giá trị trả về của __set () bị bỏ qua vì cách PHP xử lý toán tử gán. Tương tự, __get () không bao giờ được gọi khi chuỗi các bài tập với nhau như thế này:

 $a = $obj->b = 8; 
1

 $a = $obj->b = 8; 

Ghi chú::

Giá trị trả về của __set () bị bỏ qua vì cách PHP xử lý toán tử gán. Tương tự, __get () không bao giờ được gọi khi chuỗi các bài tập với nhau như thế này:

 $a = $obj->b = 8; 
1
 $a = $obj->b = 8; 
4
if there is no
 $a = $obj->b = 8; 
5 property defined, rather than calling __get() a second time. However, overload methods may invoke other overload methods implicitly (such as __set() triggering __get()).

PHP sẽ không gọi một phương thức quá tải từ trong cùng một phương thức quá tải. Điều đó có nghĩa là, ví dụ, viết

 $a = $obj->b = 8; 
2 bên trong __get () sẽ trả về
 $a = $obj->b = 8; 
3 và tăng
 $a = $obj->b = 8; 
4 nếu không có tài sản
 $a = $obj->b = 8; 
5 được xác định, thay vì gọi __get () lần thứ hai. Tuy nhiên, các phương thức quá tải có thể gọi các phương thức quá tải khác một cách ngầm (chẳng hạn như __set () kích hoạt __get ()).

 $a = $obj->b = 8; 
6

 $a = $obj->b = 8; 
7

 $a = $obj->b = 8; 
8

Ví dụ #1 Thuộc tính quá tải thông qua các phương thức __get (), __set (), __isset () và __unset ()

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29

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

Phương pháp quá tải __call(string $name, array

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): mixed

public__call (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp __callStatic(string $name, array
Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0
): mixed

public static__callstatic (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp

__call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh đối tượng.

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
3

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
4

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
5

Ví dụ #1 Thuộc tính quá tải thông qua các phương thức __get (), __set (), __isset () và __unset ()

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context

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

Phương pháp quá tải

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
6

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
7

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
8

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

public__call (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp

public static__callstatic (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
0

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
1

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
2

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
3

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
4

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
5

__call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh đối tượng.

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
6

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
7

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
8

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context
9

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

public static__callstatic (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp

public0

public1

public2

public3

public4

public5

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

public__call (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp

public static__callstatic (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp

public7

public8

public9

$name0

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

__call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh đối tượng.

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

$name2

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

$name3

Theaceofthespade tại gmail dot com ¶

public static__callstatic (chuỗi $name, mảng

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
0): hỗn hợp

$name4

$name5

$name6

$name7

$name8

__call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh đối tượng.

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

$name9

$value0

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

$value2

$value3

$value4

$value5

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

Theaceofthespade tại gmail dot com ¶

10 năm trước

$value7

Ẩn danh ¶

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

$value8

$value9

$name0

$name1

$name2

Theaceofthespade tại gmail dot com ¶

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

$name3

$name4

$name5

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

$name7

$name8

$name9

$name0

Theaceofthespade tại gmail dot com ¶

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

$name1

$name2

$name3

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

$name5

$name6

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

Theaceofthespade tại gmail dot com ¶

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

$name8

$name9

$name0

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

$name1

$name2

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

$name4

$name5

$name6

$name7

$name8

$name9

 $a = $obj->b = 8; 
00

 $a = $obj->b = 8; 
01

Theaceofthespade tại gmail dot com ¶

10 năm trước

 $a = $obj->b = 8; 
02

 $a = $obj->b = 8; 
03

 $a = $obj->b = 8; 
04

 $a = $obj->b = 8; 
05

Ẩn danh ¶

10 năm trước

 $a = $obj->b = 8; 
06

 $a = $obj->b = 8; 
07

 $a = $obj->b = 8; 
08

 $a = $obj->b = 8; 
09

 $a = $obj->b = 8; 
10

Ẩn danh ¶

6 năm trước

 $a = $obj->b = 8; 
11

 $a = $obj->b = 8; 
12

Setting 'a' to '1'
Getting 'a'
1

Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)

1

Let's experiment with the private property named 'hidden':
Privates are visible inside the class, so __get() not used...
2
Privates not visible outside of class, so __get() is used...
Getting 'hidden'


Notice:  Undefined property via __get(): hidden in  on line 70 in  on line 29
9

Egingell tại Sisna Dot Com ¶

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

 $a = $obj->b = 8; 
14

 $a = $obj->b = 8; 
15

 $a = $obj->b = 8; 
16

 $a = $obj->b = 8; 
17

 $a = $obj->b = 8; 
18

 $a = $obj->b = 8; 
19

Theaceofthespade tại gmail dot com ¶

__callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.

 $a = $obj->b = 8; 
20

 $a = $obj->b = 8; 
21

 $a = $obj->b = 8; 
22

 $a = $obj->b = 8; 
23

$name7

 $a = $obj->b = 8; 
25

Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name.

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

 $a = $obj->b = 8; 
26

 $a = $obj->b = 8; 
27

 $a = $obj->b = 8; 
04

 $a = $obj->b = 8; 
29

Theaceofthespade tại gmail dot com ¶

Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()

 $a = $obj->b = 8; 
30

 $a = $obj->b = 8; 
31

 $a = $obj->b = 8; 
32

 $a = $obj->b = 8; 
33

 $a = $obj->b = 8; 
34

Devildude tại Darkmaker dot com ¶

18 năm trước

 $a = $obj->b = 8; 
35