Hướng dẫn anonymous object php - đối tượng ẩn danh php

Các lớp ẩn danh rất hữu ích khi các đối tượng đơn giản, một lần cần được tạo.

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});

Họ có thể chuyển các đối số qua các hàm tạo của mình, mở rộng các lớp khác, thực hiện giao diện và sử dụng các đặc điểm giống như một lớp bình thường có thể:

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;

    public function

__construct($num)
    {
        
$this->num $num;
    }

    use

SomeTrait;
});

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

object(class@anonymous)#1 (1) {
  ["Command line code0x104c5b612":"class@anonymous":private]=>
  int(10)
}

Việc tổ chức một lớp ẩn danh trong một lớp khác không cho phép nó truy cập vào bất kỳ phương thức hoặc thuộc tính riêng tư hoặc được bảo vệ nào của lớp bên ngoài đó. Để sử dụng các thuộc tính hoặc phương thức được bảo vệ của lớp bên ngoài, lớp ẩn danh có thể mở rộng lớp bên ngoài. Để sử dụng các thuộc tính riêng của lớp bên ngoài trong lớp ẩn danh, chúng phải được chuyển qua hàm tạo của nó:

class Outer
{
    private 
$prop 1;
    protected 
$prop2 2;

    protected function

func1()
    {
        return 
3;
    }

    public function

func2()
    {
        return new class(
$this->prop) extends Outer {
            private 
$prop3;

            public function

__construct($prop)
            {
                
$this->prop3 $prop;
            }

            public function

func3()
            {
                return 
$this->prop2 $this->prop3 $this->func1();
            }
        };
    }
}

echo (new

Outer)->func2()->func3();

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

Việc tổ chức một lớp ẩn danh trong một lớp khác không cho phép nó truy cập vào bất kỳ phương thức hoặc thuộc tính riêng tư hoặc được bảo vệ nào của lớp bên ngoài đó. Để sử dụng các thuộc tính hoặc phương thức được bảo vệ của lớp bên ngoài, lớp ẩn danh có thể mở rộng lớp bên ngoài. Để sử dụng các thuộc tính riêng của lớp bên ngoài trong lớp ẩn danh, chúng phải được chuyển qua hàm tạo của nó:

function anonymous_class()
{
    return new class {};
}

class@anonymous/in/oNi1A0x7f8636ad2021
0

Tất cả các đối tượng được tạo bởi cùng một tuyên bố lớp ẩn danh là các trường hợp của chính lớp đó.

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

Việc tổ chức một lớp ẩn danh trong một lớp khác không cho phép nó truy cập vào bất kỳ phương thức hoặc thuộc tính riêng tư hoặc được bảo vệ nào của lớp bên ngoài đó. Để sử dụng các thuộc tính hoặc phương thức được bảo vệ của lớp bên ngoài, lớp ẩn danh có thể mở rộng lớp bên ngoài. Để sử dụng các thuộc tính riêng của lớp bên ngoài trong lớp ẩn danh, chúng phải được chuyển qua hàm tạo của nó::

Tất cả các đối tượng được tạo bởi cùng một tuyên bố lớp ẩn danh là các trường hợp của chính lớp đó.

class@anonymous/in/oNi1A0x7f8636ad2021
2

class@anonymous/in/oNi1A0x7f8636ad2021
1

class@anonymous/in/oNi1A0x7f8636ad2021

Ghi chú:

Lưu ý rằng các lớp ẩn danh được gán một tên bởi động cơ, như được trình bày trong ví dụ sau. Tên này phải được coi là một chi tiết thực hiện, không nên dựa vào.

class@anonymous/in/oNi1A0x7f8636ad2021
3

class@anonymous/in/oNi1A0x7f8636ad2021
4

class@anonymous/in/oNi1A0x7f8636ad2021
5

class@anonymous/in/oNi1A0x7f8636ad2021
6

Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:

Ẩn danh ¶

class@anonymous/in/oNi1A0x7f8636ad2021
7

class@anonymous/in/oNi1A0x7f8636ad2021
8

class@anonymous/in/oNi1A0x7f8636ad2021
9

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
0

6 năm trước

ytubeshareit tại gmail dot com ¶

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
1

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
2

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
3

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
4

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
5

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
6

5 năm trước

ytubeshareit tại gmail dot com ¶

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
7

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
8

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
9

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
0

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
6

5 năm trước

Ẩn danh ¶

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
2

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
3

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
4

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
5

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
6

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
7

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
6

6 năm trước

ytubeshareit tại gmail dot com ¶

class SomeClass {}
interface 
SomeInterface {}
trait 
SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {
    private 
$num;
9

    public function0

    public function1

    public function2

5 năm trước

Ẩn danh ¶

    public function3

    public function4

    public function5

// Using an explicit class
class Logger
{
    public function 
log($msg)
    {
        echo 
$msg;
    }
}
$util->setLogger(new Logger());// Using an anonymous class
$util->setLogger(new class {
    public function 
log($msg)
    {
        echo 
$msg;
    }
});
6

6 năm trước

ytubeshareit tại gmail dot com ¶

    public function7

    public function8

    public function9

5 năm trước

Lưu ý rằng các lớp ẩn danh được gán một tên bởi động cơ, như được trình bày trong ví dụ sau. Tên này phải được coi là một chi tiết thực hiện, không nên dựa vào.

__construct($num)
    {
        
$this->num $num;
    }

    use

SomeTrait;
});
0

class@anonymous/in/oNi1A0x7f8636ad2021
5

__construct($num)
    {
        
$this->num $num;
    }

    use

SomeTrait;
});
2