Hướng dẫn invoke magic method in php - gọi phương thức ma thuật trong php

Phương pháp ma thuật là các phương thức đặc biệt ghi đè hành động mặc định của PHP khi một số hành động được thực hiện trên một đối tượng.

Thận trọng

Tất cả các tên phương thức bắt đầu bằng __ được dành riêng bởi PHP. Do đó, không nên sử dụng các tên phương thức đó trừ khi ghi đè hành vi của PHP.

Các tên phương thức sau được coi là phép thuật: __construct (), __destruct (), __call (), __callstatic (), __get (), __set (), __isset (), __unset (), __s ngủ (), __wakeup () ), __unSerialize (), __ToString (), __invoke (), __set_state (), __clone () và __debuginfo ().

Cảnh báo

Tất cả các phương thức ma thuật, ngoại trừ __construct (), __destruct () và __clone (), phải được khai báo là public, nếu không thì E_WARNING được phát ra. Trước PHP 8.0.0, không có chẩn đoán nào được phát ra cho các phương thức ma thuật __sleep (), __wakeUp (), __serialize (), __unSerialize () và __set_state ().E_WARNING is emitted. Prior to PHP 8.0.0, no diagnostic was emitted for the magic methods __sleep(), __wakeup(), __serialize(), __unserialize(), and __set_state().

Cảnh báo

Tất cả các phương thức ma thuật, ngoại trừ __construct (), __destruct () và __clone (), phải được khai báo là public, nếu không thì E_WARNING được phát ra. Trước PHP 8.0.0, không có chẩn đoán nào được phát ra cho các phương thức ma thuật __sleep (), __wakeUp (), __serialize (), __unSerialize () và __set_state ().

Nếu khai báo loại được sử dụng trong định nghĩa của phương pháp ma thuật, chúng phải giống hệt với chữ ký được mô tả trong tài liệu này. Nếu không, một lỗi nghiêm trọng được phát ra. Trước Php 8.0.0, không có chẩn đoán nào được phát ra. Tuy nhiên, __construct () và __destruct () không được khai báo loại trả lại; Nếu không, một lỗi nghiêm trọng được phát ra.

__s ngủ () và __wakeup () __sleep(): array

public__s ngủ (): mảng __wakeup(): void

public__wakeup (): void checks if the class has a function with the magic name __sleep(). If so, that function is executed prior to any serialization. It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized. If the method doesn't return anything then null is serialized and E_NOTICE is issued.

serialize () kiểm tra xem lớp có chức năng với tên ma thuật __s ngủ (). Nếu vậy, chức năng đó được thực thi trước khi có tuần tự hóa. Nó có thể làm sạch đối tượng và được cho là sẽ trả về một mảng với tên của tất cả các biến của đối tượng đó cần được tuần tự hóa. Nếu phương thức không trả về bất cứ điều gì thì null sẽ được tuần tự hóa và E_NOTICE được ban hành.:

Ghi chú:E_NOTICE level error. Use __serialize() instead.

__Sle ngủ () không thể trả lại tên của các thuộc tính riêng trong các lớp cha. Làm điều này sẽ dẫn đến lỗi cấp E_NOTICE. Sử dụng __serialize () thay thế.

Việc sử dụng dự định của __s ngủ () là thực hiện dữ liệu đang chờ xử lý hoặc thực hiện các tác vụ dọn dẹp tương tự. Ngoài ra, chức năng này rất hữu ích nếu một đối tượng rất lớn không cần được lưu hoàn toàn.unserialize() checks for the presence of a function with the magic name __wakeup(). If present, this function can reconstruct any resources that the object may have.

Ngược lại, unserialize () kiểm tra sự hiện diện của một hàm với tên ma thuật __wakeUp (). Nếu có, chức năng này có thể xây dựng lại bất kỳ tài nguyên nào mà đối tượng có thể có.

Việc sử dụng dự định của __wakeUp () là thiết lập lại bất kỳ kết nối cơ sở dữ liệu nào có thể bị mất trong quá trình tuần tự hóa và thực hiện các tác vụ tái tạo khác.

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
0

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
1

Ví dụ #1 giấc ngủ và thức dậy

__Serialize () và __unSerialize () __serialize(): array

public__serialize (): mảng __unserialize(array

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
2): void

public__unSerialize (mảng

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
2): VOID checks if the class has a function with the magic name __serialize(). If so, that function is executed prior to any serialization. It must construct and return an associative array of key/value pairs that represent the serialized form of the object. If no array is returned a TypeError will be thrown.

serialize () kiểm tra xem lớp có chức năng với tên ma thuật __s ngủ (). Nếu vậy, chức năng đó được thực thi trước khi có tuần tự hóa. Nó có thể làm sạch đối tượng và được cho là sẽ trả về một mảng với tên của tất cả các biến của đối tượng đó cần được tuần tự hóa. Nếu phương thức không trả về bất cứ điều gì thì null sẽ được tuần tự hóa và E_NOTICE được ban hành.:

Ghi chú:

__Sle ngủ () không thể trả lại tên của các thuộc tính riêng trong các lớp cha. Làm điều này sẽ dẫn đến lỗi cấp E_NOTICE. Sử dụng __serialize () thay thế.

Việc sử dụng dự định của __s ngủ () là thực hiện dữ liệu đang chờ xử lý hoặc thực hiện các tác vụ dọn dẹp tương tự. Ngoài ra, chức năng này rất hữu ích nếu một đối tượng rất lớn không cần được lưu hoàn toàn.unserialize() checks for the presence of a function with the magic name __unserialize(). If present, this function will be passed the restored array that was returned from __serialize(). It may then restore the properties of the object from that array as appropriate.

serialize () kiểm tra xem lớp có chức năng với tên ma thuật __s ngủ (). Nếu vậy, chức năng đó được thực thi trước khi có tuần tự hóa. Nó có thể làm sạch đối tượng và được cho là sẽ trả về một mảng với tên của tất cả các biến của đối tượng đó cần được tuần tự hóa. Nếu phương thức không trả về bất cứ điều gì thì null sẽ được tuần tự hóa và E_NOTICE được ban hành.:

Ghi chú:

serialize () kiểm tra xem lớp có chức năng với tên ma thuật __s ngủ (). Nếu vậy, chức năng đó được thực thi trước khi có tuần tự hóa. Nó có thể làm sạch đối tượng và được cho là sẽ trả về một mảng với tên của tất cả các biến của đối tượng đó cần được tuần tự hóa. Nếu phương thức không trả về bất cứ điều gì thì null sẽ được tuần tự hóa và E_NOTICE được ban hành.:

Ghi chú:

__Sle ngủ () không thể trả lại tên của các thuộc tính riêng trong các lớp cha. Làm điều này sẽ dẫn đến lỗi cấp E_NOTICE. Sử dụng __serialize () thay thế.

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
5

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
6

__toString()

Việc sử dụng dự định của __s ngủ () là thực hiện dữ liệu đang chờ xử lý hoặc thực hiện các tác vụ dọn dẹp tương tự. Ngoài ra, chức năng này rất hữu ích nếu một đối tượng rất lớn không cần được lưu hoàn toàn. __toString(): string

Ngược lại, unserialize () kiểm tra sự hiện diện của một hàm với tên ma thuật __wakeUp (). Nếu có, chức năng này có thể xây dựng lại bất kỳ tài nguyên nào mà đối tượng có thể có.

Cảnh báo

Tất cả các phương thức ma thuật, ngoại trừ __construct (), __destruct () và __clone (), phải được khai báo là public, nếu không thì E_WARNING được phát ra. Trước PHP 8.0.0, không có chẩn đoán nào được phát ra cho các phương thức ma thuật __sleep (), __wakeUp (), __serialize (), __unSerialize () và __set_state ().string if possible and if strict typing is disabled.

Nếu khai báo loại được sử dụng trong định nghĩa của phương pháp ma thuật, chúng phải giống hệt với chữ ký được mô tả trong tài liệu này. Nếu không, một lỗi nghiêm trọng được phát ra. Trước Php 8.0.0, không có chẩn đoán nào được phát ra. Tuy nhiên, __construct () và __destruct () không được khai báo loại trả lại; Nếu không, một lỗi nghiêm trọng được phát ra.Stringable interface, and will thus pass type checks for that interface. Explicitly implementing the interface anyway is recommended.

__s ngủ () và __wakeup ()string, otherwise an Error is thrown.

public__s ngủ (): mảngstring, otherwise a fatal

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
8 is emitted.

Cảnh báo

Không thể ném một ngoại lệ từ trong một phương thức __tostring () trước PHP 7.4.0. Làm như vậy sẽ dẫn đến một lỗi nghiêm trọng.

Ví dụ #3 Ví dụ đơn giản

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
9

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
5

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
1

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

__invoke()

__invoke (

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
2): hỗn hợp(
object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
2
): mixed

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.

Ví dụ #4 sử dụng __invoke ()

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
3

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

__invoke (

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
2): hỗn hợp

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
4

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
5

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
6

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

Array
(
    [0] => Array
        (
            [id] => 3
            [first_name] => Alice
            [last_name] => Gustav
        )

    [1] => Array
        (
            [id] => 2
            [first_name] => Bob
            [last_name] => Filipe
        )

    [2] => Array
        (
            [id] => 1
            [first_name] => John
            [last_name] => Do
        )

)
Array
(
    [0] => Array
        (
            [id] => 1
            [first_name] => John
            [last_name] => Do
        )

    [1] => Array
        (
            [id] => 2
            [first_name] => Bob
            [last_name] => Filipe
        )

    [2] => Array
        (
            [id] => 3
            [first_name] => Alice
            [last_name] => Gustav
        )

)

__set_state()

__invoke (

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
2): hỗn hợp __set_state(array
object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
7
): object

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.var_export().

Ví dụ #4 sử dụng __invoke ()

Ví dụ #5 sử dụng __invoke ()

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
9

__0

__1

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

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}

__invoke (

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
2): hỗn hợp: When exporting an object, var_export() does not check whether __set_state() is implemented by the object's class, so re-importing objects will result in an Error exception, if __set_state() is not implemented. Particularly, this affects some internal classes. It is the responsibility of the programmer to verify that only objects will be re-imported, whose class implements __set_state().

__debugInfo()

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.(): array

Ví dụ #4 sử dụng __invoke ()var_dump() when dumping an object to get the properties that should be shown. If the method isn't defined on an object, then all public, protected and private properties will be shown.

Ví dụ #5 sử dụng __invoke ()

__2

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
5

__4

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

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}

__invoke (

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
2): hỗn hợp

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.

__5

__6

__7

__8

__9

public0

public1

Ví dụ #4 sử dụng __invoke ()

Ví dụ #5 sử dụng __invoke ()

public2

public3

public4

public5

Static__set_state (Array

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
7): Đối tượng

Phương thức tĩnh này được gọi cho các lớp được xuất bởi var_export ().

public6

public7

public8

public9

Tham số duy nhất của phương pháp này là một mảng chứa các thuộc tính được xuất ở dạng

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
8.

Ví dụ #6 Sử dụng __set_state ()

E_WARNING0

E_WARNING1

E_WARNING2

E_WARNING3

Lưu ý: Khi xuất một đối tượng, var_export () không kiểm tra xem __set_state () có được thực hiện bởi lớp của đối tượng hay không, do đó, việc nhập lại các đối tượng sẽ dẫn đến ngoại lệ lỗi, nếu __set_state () không được triển khai. Đặc biệt, điều này ảnh hưởng đến một số lớp nội bộ. Trách nhiệm của lập trình viên là xác minh rằng chỉ các đối tượng sẽ được thực hiện lại, có lớp thực hiện __set_state ().

__debuginfo (): mảng

E_WARNING4

Phương thức này được gọi bằng var_dump () khi bán một đối tượng để có được các thuộc tính cần được hiển thị. Nếu phương thức không được xác định trên một đối tượng, thì tất cả các thuộc tính công khai, được bảo vệ và riêng tư sẽ được hiển thị.

Ví dụ #7 Sử dụng __debuginfo ()

E_WARNING5

E_WARNING6

E_WARNING7

E_WARNING8

Jon tại Webignition Dot Net

14 năm trước

E_WARNING9

null0

null1

null2

null3

null4

null5

JSNELL tại E-Normous Dot Com ¶

13 năm trước

null6

null7

null8

null9

E_NOTICE0

E_NOTICE1

ctamayo tại sitecraftting dot com

2 năm trước

E_NOTICE2

E_NOTICE3

E_NOTICE4

E_NOTICE5

E_NOTICE6

E_NOTICE7

kguest tại php dot net ¶

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.

E_NOTICE8

E_NOTICE9

E_NOTICE0

E_NOTICE1

E_NOTICE2

E_NOTICE3

Ví dụ #4 sử dụng __invoke ()

Ví dụ #5 sử dụng __invoke ()

E_NOTICE4

E_NOTICE5

E_NOTICE6

E_NOTICE7

public1

Static__set_state (Array

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
7): Đối tượng

__debuginfo (): mảng

E_NOTICE9

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
0

public1

Phương thức này được gọi bằng var_dump () khi bán một đối tượng để có được các thuộc tính cần được hiển thị. Nếu phương thức không được xác định trên một đối tượng, thì tất cả các thuộc tính công khai, được bảo vệ và riêng tư sẽ được hiển thị.

__debuginfo (): mảng

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
2

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
3

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
4

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
5

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
6

Phương thức này được gọi bằng var_dump () khi bán một đối tượng để có được các thuộc tính cần được hiển thị. Nếu phương thức không được xác định trên một đối tượng, thì tất cả các thuộc tính công khai, được bảo vệ và riêng tư sẽ được hiển thị.

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
7

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
8

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
9

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
00

public1

Ví dụ #4 sử dụng __invoke ()

Ví dụ #5 sử dụng __invoke ()

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
02

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
03

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
5

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
05

Static__set_state (Array

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
7): Đối tượng

Ví dụ #5 sử dụng __invoke ()

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
06

Static__set_state (Array

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
7): Đối tượng

__debuginfo (): mảng

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
07

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
08

public1

Phương thức này được gọi bằng var_dump () khi bán một đối tượng để có được các thuộc tính cần được hiển thị. Nếu phương thức không được xác định trên một đối tượng, thì tất cả các thuộc tính công khai, được bảo vệ và riêng tư sẽ được hiển thị.

2 năm trước

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
10

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
11

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
5

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
13

kguest tại php dot net ¶

5 năm trước

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
14

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
15

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
16

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
17

jeffxlevy tại gmail dot com

17 năm trước

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
18

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
19

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
20

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
21

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
22

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
23

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
24

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
25

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
26

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
27

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
28

public1

kguest tại php dot net ¶

5 năm trước

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
30

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
31

E_NOTICE0

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
33

jeffxlevy tại gmail dot com

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
34

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
35

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
36

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
37

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
38

Ví dụ #4 sử dụng __invoke ()

13 năm trước

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
39

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
40

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
41

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
42

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
43

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
44

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
25

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
46

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
47

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
48

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
49

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
25

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
51

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
52

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
53

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
54

public1

ctamayo tại sitecraftting dot com

__debuginfo (): mảng

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
56

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
57

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
58

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
59

public1

Phương thức này được gọi bằng var_dump () khi bán một đối tượng để có được các thuộc tính cần được hiển thị. Nếu phương thức không được xác định trên một đối tượng, thì tất cả các thuộc tính công khai, được bảo vệ và riêng tư sẽ được hiển thị.

17 năm trước

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
61

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
62

E_NOTICE2

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
64

Smiley tại Hellospambot Dot Chillerlan Dot Net

Ví dụ #5 sử dụng __invoke ()

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
65

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
66

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
67

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
68

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
69

public1

Static__set_state (Array

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
7): Đối tượng

Phương thức tĩnh này được gọi cho các lớp được xuất bởi var_export ().

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
71

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
72

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
5

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
74

kguest tại php dot net ¶

Phương thức __invoke () được gọi khi một tập lệnh cố gắng gọi một đối tượng là một hàm.

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
75

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
76

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
77

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
78

<?php
class Connection
{
    protected 
$link;
    private 
$dsn$username$password;
5

Ví dụ #4 sử dụng __invoke ()

Ví dụ #5 sử dụng __invoke ()

5 năm trước

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
81

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
82

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
83

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
84

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}
85

__ gọi trong PHP là gì?

Phương pháp __invoke là một cách mà PHP có thể phù hợp với các chức năng pseudo-first-Class.Phương pháp __invoke có thể được sử dụng để vượt qua một lớp có thể hoạt động như một sự đóng cửa hoặc tiếp tục, hoặc đơn giản là một hàm mà bạn có thể vượt qua.Rất nhiều chương trình chức năng dựa trên các chức năng hạng nhất.a way that PHP can accommodate pseudo-first-class functions. The __invoke method can be used to pass a class that can act as a closure or a continuation, or simply as a function that you can pass around. A lot of functional programming relies on first class functions.

Phương pháp ma thuật trong PHP là gì?

Các phương thức ma thuật là các phương thức đặc biệt ghi đè hành động mặc định của PHP khi một số hành động được thực hiện trên một đối tượng.Thận trọng.Tất cả các phương thức Tên bắt đầu bằng __ được dành riêng bởi PHP.Do đó, không nên sử dụng các tên phương thức đó trừ khi ghi đè hành vi của PHP.special methods which override PHP's default's action when certain actions are performed on an object. Caution. All methods names starting with __ are reserved by PHP. Therefore, it is not recommended to use such method names unless overriding PHP's behavior.

Phương pháp ma thuật trong PHP với các ví dụ là gì?

Phương pháp ma thuật là gì và làm thế nào để sử dụng chúng trong PHP?.

__ le __ một phương pháp ma thuật cho là gì?

Ví dụ: phương thức __add__ là một phương thức ma thuật được gọi khi chúng ta thêm hai số bằng toán tử +.... Phương pháp ma thuật quan trọng ..