Hướng dẫn write a simple php program on introspection and serialization - viết một chương trình php đơn giản về nội quan và tuần tự hóa

Hướng nội và tuần tự hóa trong PHP

Hướng dẫn write a simple php program on introspection and serialization - viết một chương trình php đơn giản về nội quan và tuần tự hóa

Hướng nội trong PHP: Hướng nội trong PHP cung cấp khả năng hữu ích để kiểm tra các đặc điểm của đối tượng, chẳng hạn như tên của nó, lớp cha (nếu có) thuộc tính, lớp, giao diện và phương thức. PHP cung cấp một số lượng lớn các chức năng mà bạn có thể sử dụng để hoàn thành nhiệm vụ. Sau đây là các chức năng để trích xuất thông tin cơ bản về các lớp như tên của chúng, tên của lớp phụ huynh của họ, v.v. Các chức năng được xây dựng trong hướng nội php:
Introspection in PHP offers the useful ability to examine an object's characteristics, such as its name, parent class (if any) properties, classes, interfaces, and methods.
PHP offers a large number of functions that you can use to accomplish the task.
The following are the functions to extract basic information about classes such as their name, the name of their parent class and so on.
In-built functions in PHP Introspection :

FunctionDescription
class_exists()Checks whether a class has been defined.
et_class()Returns the class name of an object.
get parent_class()Returns the class name of a Return object's parent class.
is_subclass_of()Checks whether an object has a given parent class.
get_declared_classes() Returns a list of all declared classes.

get_class_methods() Returns the names of the class methods.
get_class_vars()Returns the default properties of a class
interface_exists()Checks whether the interface is defined.
method_exists()Checks whether an object defines a method.

Ví dụ 1:

Đầu ra: không tồn tại

Ví dụ 2:

Đầu ra: Đây là cwipedia.in

Tái hóa trong PHP: tuần tự hóa là một kỹ thuật được các lập trình viên sử dụng để bảo tồn dữ liệu làm việc của họ theo định dạng mà sau này có thể được khôi phục về hình thức trước đó.
Serialization is a technique used by programmers to preserve their working data in a format that can later be restored to its previous form.

Xét nghiệm một đối tượng có nghĩa là chuyển đổi nó thành biểu diễn luồng byte có thể được lưu trữ trong một tệp.

Tái hóa trong PHP chủ yếu là tự động, nó đòi hỏi rất ít công việc thêm từ bạn, ngoài việc gọi các hàm serialize () và unserialize ().

Serialize (): serialize () chuyển đổi một biểu diễn có thể lưu trữ của một giá trị. Hàm tuần tự hóa () chấp nhận một tham số duy nhất là dữ liệu chúng tôi muốn tuần tự hóa và trả về một chuỗi tuần tự hóa dữ liệu nối tiếp có nghĩa là một chuỗi các bit để nó có thể được lưu trữ trong một tệp, bộ đệm bộ nhớ hoặc truyền qua kết nối mạng liên kết. Nó rất hữu ích để lưu trữ hoặc truyền các giá trị PHP xung quanh mà không mất loại và cấu trúc của chúng.
The serialize() converts a storable representation of a value.
The serialize() function accepts a single parameter which is the data we want to serialize and returns a serialized string
A serialize data means a sequence of bits so that it can be stored in a file, a memory buffer, or transmitted across a network connection link. It is useful for storing or passing PHP values around without losing their type and structure.

Cú pháp: nối tiếp (giá trị);
serialize(value);

unserialize (): unserialize () có thể sử dụng chuỗi để tạo lại các giá trị biến ban đầu, tức là chuyển đổi dữ liệu thực tế từ dữ liệu nối tiếp.
unserialize() can use string to recreate the original variable values i.e. converts actual data from serialized data.

Cú pháp: unserialize (chuỗi); ví dụ:
unserialize(string);

Example:

";
print_r($s1);
?>

Đầu ra: a: 3: {i: 0; s: 6: "shivam"; i: 1; s: 5: "rahul"; i: 2; s: 5: "vilas";} mảng ([0] = > Shivam [1] => Rahul [2] => Vilas)
a:3:{i:0;s:6:"Shivam";i:1;s:5:"Rahul";i:2;s:5:"Vilas";}
Array ( [0] => Shivam [1] => Rahul [2] => Vilas )


Hướng nội là một tính năng phổ biến trong bất kỳ ngôn ngữ lập trình nào cho phép các lớp đối tượng được lập trình viên thao túng. Bạn sẽ tìm thấy nội tâm đặc biệt hữu ích khi bạn không biết bạn cần thực hiện lớp hoặc phương pháp nào vào thời điểm thiết kế.

Hướng nội trong PHP cung cấp khả năng hữu ích để kiểm tra các lớp, giao diện, thuộc tính và phương thức. PHP cung cấp một chức năng số lượng lớn mà bạn có thể sử dụng để hoàn thành nhiệm vụ. Để giúp bạn hiểu nội tâm, tôi sẽ cung cấp một cái nhìn tổng quan ngắn gọn về một số lớp, phương pháp và chức năng của PHP bằng cách sử dụng các ví dụ trong PHP để làm nổi bật cách chúng được sử dụng.

Trong bài viết này, bạn sẽ thấy một vài ví dụ về cách sử dụng một số chức năng hướng nội PHP hữu ích nhất và một phần dành riêng cho API cung cấp chức năng tương tự như hướng nội, API phản ánh.

Chức năng nội tâm PHP

Trong ví dụ đầu tiên, tôi sẽ chứng minh một số ít các chức năng nội tâm của PHP. Bạn có thể sử dụng các chức năng này để trích xuất thông tin cơ bản về các lớp như tên của chúng, tên của lớp phụ huynh của họ, v.v.

  • 0 - Kiểm tra xem một lớp đã được xác định
  • 1 - Trả về tên lớp của một đối tượng
  • 2 - Trả về tên lớp của lớp cha mẹ đối tượng
  • 3 - Kiểm tra xem một đối tượng có lớp cha mẹ nhất định không

Dưới đây là mã PHP ví dụ chứa định nghĩa cho các lớp

4 và
5 và thông tin đầu ra được trích xuất bởi các chức năng được liệt kê ở trên:

description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}

Đầu ra của mã trên phải như sau:

The class name is: Introspection
I am a super class for the Child class.
I'm Child class.
I'm Introspection's child.
Yes, Child is a subclass of Introspection.

Bạn có thể xác định xem lớp đã cho có được xác định bằng phương thức

0 hay không, có đối số chuỗi đại diện cho tên của lớp mong muốn để kiểm tra và giá trị boolean tùy chọn có hay không gọi trình tải tự động trong quy trình.

Các phương thức

1 và
2 trả về tên lớp của một đối tượng hoặc tên lớp cha mẹ của nó tương ứng. Cả hai lấy là đối số là một thể hiện đối tượng.

Các phương thức

3 lấy một thể hiện đối tượng làm đối số đầu tiên và một chuỗi, đại diện cho tên lớp cha và trả về xem đối tượng có thuộc về một lớp là một lớp con của lớp được đưa ra làm đối số hay không.

Ở đây, một ví dụ thứ hai có chứa định nghĩa cho giao diện

0 và lớp
1 và thông tin đầu ra được trích xuất bởi các chức năng được liệt kê ở trên. Như với ví dụ đầu tiên, tôi sẽ liệt kê các chức năng trước và sau đó hiển thị cho bạn một số mã.

  • 2 - Trả về danh sách tất cả các lớp được khai báo
  • 3 - Trả về tên của các phương thức lớp
  • 4 - Trả về các thuộc tính mặc định của một lớp
  • 5 - Kiểm tra xem giao diện có được xác định không
  • 6 - Kiểm tra xem một đối tượng có định nghĩa phương thức không
 0.622846,
                          "AUD" => 0.643478);
    protected $var1;
    private $var2;

    function __construct() {}

    function convert($currency, $amount) {
        return $rates[$currency] * $amount;
    }
}

if (interface_exists("ICurrencyConverter")) {
    echo "ICurrencyConverter interface exists.n";
}

$classes = get_declared_classes();
echo "The following classes are available:n";
print_r($classes);

if (in_array("GBPCurrencyConverter", $classes)) {
    print "GBPCurrencyConverter is declared.n";
 
    $gbpConverter = new GBPCurrencyConverter();

    $methods = get_class_methods($gbpConverter);
    echo "The following methods are available:n";
    print_r($methods);

    $vars = get_class_vars("GBPCurrencyConverter");
    echo "The following properties are available:n";
    print_r($vars);

    echo "The method convert() exists for GBPCurrencyConverter: ";
    var_dump(method_exists($gbpConverter, "convert"));
}

Đầu ra của mã trên phải như sau:

ICurrencyConverter interface exists.
The following classes are available:
Array
(
    [0] => stdClass
    [1] => Exception
    [2] => ErrorException
    [3] => Closure
    [4] => DateTime
    [5] => DateTimeZone
    [6] => DateInterval
    [7] => DatePeriod
    ...
    [154] => GBPCurrencyConverter
)
GBPCurrencyConverter is declared.
The following methods are available:
Array
(
    [0] => __construct
    [1] => convert
)
The following properties are available:
Array
(
    [name] => GBPCurrencyConverter
    [rates] => Array
        (
            [USD] => 0.622846
            [AUD] => 0.643478
        )
)
The method convert() exists for GBPCurrencyConverter: bool(true)

Bạn có thể xác định xem lớp đã cho có được xác định bằng phương thức

0 hay không, có đối số chuỗi đại diện cho tên của lớp mong muốn để kiểm tra và giá trị boolean tùy chọn có hay không gọi trình tải tự động trong quy trình.

Phương thức

2 trả về một mảng với tên của tất cả các lớp được xác định và không có đối số. Tùy thuộc vào những thư viện bạn đã tải (có thể tuân thủ vào PHP hoặc được tải với yêu cầu/bao gồm), các lớp bổ sung có thể có mặt.

";
print_r($s1);
?>
0 lấy một thể hiện đối tượng hoặc một chuỗi làm đối số đại diện cho lớp mong muốn và trả về một mảng tên phương thức được xác định bởi lớp.

Lưu ý rằng từ tất cả các thuộc tính được xác định trong lớp

0 và được trả về bằng phương thức
4, chỉ
";
print_r($s1);
?>
3 và
";
print_r($s1);
?>
4 xuất hiện trong đầu ra. Các tài sản riêng và được bảo vệ đã được bỏ qua.

API phản xạ PHP

PHP hỗ trợ phản xạ thông qua API phản ánh của nó. Như bạn có thể thấy từ hướng dẫn sử dụng PHP, API phản xạ hào phóng hơn nhiều sau đó là nội tâm và cung cấp một số lượng lớn các lớp và phương pháp mà bạn có thể sử dụng để hoàn thành các nhiệm vụ phản ánh. Lớp

";
print_r($s1);
?>
5 là lớp chính của API và được sử dụng để áp dụng sự phản ánh trên các lớp, giao diện và phương thức và để trích xuất thông tin về tất cả các thành phần lớp. Sự phản ánh rất dễ thực hiện trong mã ứng dụng của bạn và, giống như hướng nội, cũng rất trực quan.

Dưới đây là một ví dụ để minh họa sự phản ánh bằng cách sử dụng các định nghĩa tương tự cho giao diện

0 và các lớp
5 và
1:

getParentClass();
echo $child->getName() . " is a subclass of " . $parent->getName() . ".n";

$reflection = new ReflectionClass("GBPCurrencyConverter");
$interfaceNames = $reflection->getInterfaceNames();
if (in_array("ICurrencyConverter", $interfaceNames)) {
    echo "GBPCurrencyConverter implements ICurrencyConverter.n";
}

$methods = $reflection->getMethods();
echo "The following methods are available:n";
print_r($methods);

if ($reflection->hasMethod("convert")) {
    echo "The method convert() exists for GBPCurrencyConverter.n";
}

Đầu ra của mã trên phải như sau:

Child is a subclass of Introspection.
GBPCurrencyConverter implements ICurrencyConverter.
The following methods are available:
Array
(
    [0] => ReflectionMethod Object
        (
            [name] => __construct
            [class] => GBPCurrencyConverter
        )

    [1] => ReflectionMethod Object
        (
            [name] => convert
            [class] => GBPCurrencyConverter
        )

)
The method convert() exists for GBPCurrencyConverter.

Phương thức

";
print_r($s1);
?>
9 trả về một mảng có tên giao diện mà một lớp thực hiện. Phương thức
description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
0 có thể trả về biểu diễn đối tượng
";
print_r($s1);
?>
5 của lớp cha hoặc sai nếu không có cha mẹ. Để liệt kê tên của đối tượng
";
print_r($s1);
?>
5, bạn sử dụng phương thức
description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
3, như bạn đã thấy trong mã trên.

Phương pháp

description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
4 lấy một mảng các phương thức và có thể lấy một đối số tùy chọn là sự kết hợp bitmask của
description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
5,
description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
6,
description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
7,
description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
8,
description();
}

if (class_exists("Child")) {
    $child = new Child();
    $child->description();

    if (is_subclass_of($child, "Introspection")) {
        echo "Yes, " . get_class($child) . " is a subclass of Introspection.n";
    }
    else {
        echo "No, " . get_class($child) . " is not a subclass of Introspection.n";
    }
}
9 và
The class name is: Introspection
I am a super class for the Child class.
I'm Child class.
I'm Introspection's child.
Yes, Child is a subclass of Introspection.
0 để lọc danh sách dựa trên khả năng hiển thị.

API phản ánh cung cấp một triển khai tốt về sự phản ánh cho bạn khả năng tạo ra các ứng dụng phức tạp hơn, chẳng hạn như Apigen, mặc dù thảo luận thêm vượt quá mục tiêu này của bài viết này.

Bản tóm tắt

Trong bài viết này, bạn đã thấy cách sử dụng các chức năng nội tâm của PHP và API refection để có được thông tin về các lớp, giao diện, thuộc tính và phương thức. Mục đích của việc rút thông tin này là để hiểu rõ hơn về mã của bạn trong thời gian chạy và tạo các ứng dụng phức tạp.

Hình ảnh thông qua Fotolia

Hướng nội là gì giải thích với ví dụ trong PHP là gì?

Hướng nội là khả năng của một chương trình để kiểm tra các đặc điểm của một đối tượng, chẳng hạn như tên của nó, lớp cha (nếu có), thuộc tính và phương thức. Với nội tâm, bạn có thể viết mã hoạt động trên bất kỳ lớp hoặc đối tượng nào.the ability of a program to examine an object's characteristics, such as its name, parent class (if any), properties, and methods. With introspection, you can write code that operates on any class or object.

Hướng nội và tuần tự hóa là gì?

Hướng nội trong PHP: Hướng nội trong PHP cung cấp khả năng hữu ích để kiểm tra các đặc điểm của đối tượng, chẳng hạn như tên của nó, lớp cha (nếu có) thuộc tính, lớp, giao diện và phương thức. PHP cung cấp một số lượng lớn các chức năng mà bạn có thể sử dụng để hoàn thành nhiệm vụ.Introspection in PHP offers the useful ability to examine an object's characteristics, such as its name, parent class (if any) properties, classes, interfaces, and methods. PHP offers a large number of functions that you can use to accomplish the task.

Tính tuần tự hóa với ví dụ trong PHP là gì?

Xét nghiệm một đối tượng có nghĩa là chuyển đổi nó thành biểu diễn byteStream có thể được lưu trữ trong một tệp.Điều này rất hữu ích cho dữ liệu liên tục;Ví dụ: Phiên PHP tự động lưu và khôi phục các đối tượng.converting it to a bytestream representation that can be stored in a file. This is useful for persistent data; for example, PHP sessions automatically save and restore objects.

Có nghĩa là gì khi tuần tự hóa trong PHP?

Định nghĩa và sử dụng hàm serialize () chuyển đổi một biểu diễn có thể lưu trữ của một giá trị.Để tuần tự hóa dữ liệu có nghĩa là để chuyển đổi giá trị thành một chuỗi các bit, để nó có thể được lưu trữ trong một tệp, bộ đệm bộ nhớ hoặc được truyền qua một mạng.converts a storable representation of a value. To serialize data means to convert a value to a sequence of bits, so that it can be stored in a file, a memory buffer, or transmitted across a network.