Hướng dẫn what is the purpose of $this and extend in php? - mục đích của $this và mở rộng trong php là gì?

Nếu bạn muốn tạo các phiên bản chuyên dụng của các lớp tích hợp (giả sử, để tạo HTML màu khi được xuất, có các biến thành viên dễ truy cập thay vì phương thức hoặc có phương thức tiện ích), bạn có thể tiếp tục và mở rộng chúng.

Ví dụ #1 mở rộng các lớp học tích hợp

/**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();

    public function

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>

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

object(My_Reflection_Method)#1 (3) {
  ["visibility"]=>
  array(1) {
    [0]=>
    string(6) "public"
  }
  ["name"]=>
  string(1) "x"
  ["class"]=>
  string(1) "U"
}

Thận trọng

Nếu bạn đang ghi đè lên hàm tạo, hãy nhớ gọi cho hàm tạo của cha mẹ trước khi bất kỳ mã nào bạn chèn. Không làm như vậy sẽ dẫn đến những điều sau: Fatal error: Internal error: Failed to retrieve the reflection object

Khelaz tại gmail dot com ¶

11 năm trước

Extending class ReflectionFunction to get source code of function

class Custom_Reflection_Function extends ReflectionFunction {

        public function

getSource() {
        if( !
file_exists( $this->getFileName() ) ) return false; $start_offset = ( $this->getStartLine() - 1 );
       
$end_offset   = ( $this->getEndLine() - $this->getStartLine() ) + 1;

        return

join( '', array_slice( file( $this->getFileName() ), $start_offset, $end_offset ) );
    }
}
?>

Kế thừa là một nguyên tắc lập trình được thiết lập tốt và PHP sử dụng nguyên tắc này trong mô hình đối tượng của nó. Nguyên tắc này sẽ ảnh hưởng đến cách nhiều lớp và đối tượng liên quan đến nhau.

Ví dụ, khi mở rộng một lớp, lớp con kế thừa tất cả các phương thức, thuộc tính và hằng số được bảo vệ và được bảo vệ từ lớp cha. Trừ khi một lớp ghi đè các phương pháp đó, họ sẽ giữ lại chức năng ban đầu của chúng.

Điều này rất hữu ích để xác định và trừu tượng hóa chức năng và cho phép thực hiện chức năng bổ sung trong các đối tượng tương tự mà không cần phải thực hiện lại tất cả các chức năng được chia sẻ.

Các phương pháp riêng tư của lớp cha không thể truy cập được vào lớp trẻ. Do đó, các lớp trẻ em có thể tự tái tạo một phương thức riêng tư mà không quan tâm đến các quy tắc thừa kế bình thường. Tuy nhiên, trước Php 8.0.0, các hạn chế final /**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
0 đã được áp dụng cho các phương thức riêng tư. Kể từ Php 8.0.0, hạn chế phương thức riêng duy nhất được thực thi là các hàm tạo /**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
1, vì đó là một cách phổ biến để "vô hiệu hóa" hàm tạo khi sử dụng các phương thức nhà máy tĩnh thay thế.

Khả năng hiển thị của các phương pháp, tính chất và hằng số có thể được thư giãn, ví dụ: Một phương pháp /**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
2 có thể được đánh dấu là /**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
3, nhưng chúng không thể bị hạn chế, ví dụ: Đánh dấu một tài sản /**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
3 là /**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
5.

Ghi chú::

Trừ khi tự động tải được sử dụng, các lớp phải được xác định trước khi chúng được sử dụng. Nếu một lớp mở rộng một lớp khác, thì lớp cha phải được khai báo trước cấu trúc lớp con. Quy tắc này áp dụng cho các lớp kế thừa các lớp và giao diện khác.

Ghi chú::

Trừ khi tự động tải được sử dụng, các lớp phải được xác định trước khi chúng được sử dụng. Nếu một lớp mở rộng một lớp khác, thì lớp cha phải được khai báo trước cấu trúc lớp con. Quy tắc này áp dụng cho các lớp kế thừa các lớp và giao diện khác.

/**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
6

Nó không được phép ghi đè một thuộc tính đọc-viết với thuộc tính readonly hoặc ngược lại.

/**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
7

/**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
8

/**
 * My Reflection_Method class
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();
9

Ví dụ #1 ví dụ kế thừa

Trả về loại tương thích với các lớp bên trong

Trước PHP 8.1, hầu hết các lớp hoặc phương thức nội bộ đã không khai báo loại trả lại của họ và bất kỳ loại hoàn trả nào được cho phép khi mở rộng chúng.

Kể từ Php 8.1.0, hầu hết các phương thức nội bộ bắt đầu "dự kiến" khai báo loại trả lại của họ, trong trường hợp đó, loại phương thức trả về phải tương thích với cha mẹ được mở rộng; Nếu không, một thông báo không nhận được được phát ra. Lưu ý rằng việc thiếu một tuyên bố hoàn trả rõ ràng cũng được coi là sự không phù hợp đặc trưng, ​​và do đó dẫn đến thông báo từ chối.

Nếu loại trả về không thể được khai báo cho một phương thức ghi đè do các mối quan tâm tương thích phiên bản chéo PHP, một thuộc tính     public function0 có thể được thêm vào để im lặng thông báo từ chối.

    public function1

Ví dụ #2 Phương thức ghi đè không khai báo bất kỳ loại trả về nào

    public function2

Ví dụ #3 Phương thức ghi đè khai báo loại trả về sai

    public function3

Ví dụ #4 Phương thức ghi đè tuyên bố loại trả về sai mà không có thông báo không dùng nữa

Jackdracona tại msn dot com ¶

    public function4

    public function5

    public function6

    public function7

    public function8

    public function9

12 năm trước

Mohammad Istanbouly ¶

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
0

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
1

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
2

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
3

5 năm trước

Jackdracona tại msn dot com ¶

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
4

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
5

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
6

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
7

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
8

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
9

12 năm trước

Mohammad Istanbouly ¶

Fatal error: Internal error: Failed to retrieve the reflection object0

Fatal error: Internal error: Failed to retrieve the reflection object1

Fatal error: Internal error: Failed to retrieve the reflection object2

Fatal error: Internal error: Failed to retrieve the reflection object3

Fatal error: Internal error: Failed to retrieve the reflection object4

5 năm trước

Strata_ranger tại hotmail dot com

Fatal error: Internal error: Failed to retrieve the reflection object5

Fatal error: Internal error: Failed to retrieve the reflection object6

Fatal error: Internal error: Failed to retrieve the reflection object7

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
8

Fatal error: Internal error: Failed to retrieve the reflection object9

Akashwebdev tại gmail dot com ¶

7 năm trước

Extending class ReflectionFunction to get source code of function 0

Extending class ReflectionFunction to get source code of function 1

__construct($o$m)
    {
        
parent::__construct($o$m);
        
$this->visibility Reflection::getModifierNames($this->getModifiers());
    }
}
/**
 * Demo class #1
 *
 */
class {
    protected function 
x() {}
}
/**
 * Demo class #2
 *
 */
class extends {
    function 
x() {}
}
// Print out information
var_dump(new My_Reflection_Method('U''x'));
?>
8

Extending class ReflectionFunction to get source code of function 3

Jarrod tại Squarecrow Dot Com ¶

13 năm trước

Extending class ReflectionFunction to get source code of function 4

Extending class ReflectionFunction to get source code of function 5

Extending class ReflectionFunction to get source code of function 6

Extending class ReflectionFunction to get source code of function 7

Extending class ReflectionFunction to get source code of function 8

Niemans tại pbsolo dot nl ¶

2 năm trước

Extending class ReflectionFunction to get source code of function 9

class Custom_Reflection_Function extends ReflectionFunction { 0

Extending class ReflectionFunction to get source code of function 8

Mục đích của $ cái này trong PHP là gì?

$ Đây là một từ khóa dành riêng trong PHP đề cập đến đối tượng gọi. Nó thường là đối tượng mà phương thức thuộc về, nhưng có thể là một đối tượng khác nếu phương thức được gọi là tĩnh từ bối cảnh của một đối tượng thứ cấp. Từ khóa này chỉ áp dụng cho các phương thức nội bộ.refers to the calling object. It is usually the object to which the method belongs, but possibly another object if the method is called statically from the context of a secondary object. This keyword is only applicable to internal methods.

Mục đích của từ khóa cha trong PHP là gì?

Phụ huynh :: Trình truy cập nó đề cập đến các phương thức và thuộc tính trong lớp cha từ phạm vi của một lớp con.Vì lớp con nên ghi đè các thuộc tính theo mặc định, người truy cập có thể đề cập rõ ràng đến thuộc tính của lớp cha.Nó cũng tiện dụng khi cả hai lớp có thuộc tính có cùng tên.It refers to methods and properties in a parent class from the scope of a child class. Since the child class should override the properties by default, the accessor can explicitly refer to the parent class's property. It is also handy when both classes have properties with the same name.

Lớp PHP có thể mở rộng hai lớp không?

Các lớp, lớp trường hợp, đối tượng và đặc điểm đều có thể mở rộng không nhiều hơn một lớp nhưng có thể mở rộng nhiều đặc điểm cùng một lúc.can all extend no more than one class but can extend multiple traits at the same time.

Tại sao nhiều kế thừa không được sử dụng trong PHP?

Ngôn ngữ lập trình PHP thậm chí không hỗ trợ nhiều kế thừa/thừa kế.PHP chỉ hỗ trợ nhiều kế thừa bằng cách sử dụng các giao diện hoặc đặc điểm trong PHP thay vì các lớp để chúng tôi có thể thực hiện nó.Đặc điểm là một loại lớp cho phép nhiều lớp trường hợp, đối tượng, lớp và đặc điểm.. PHP supports multiple inheritances only by using interfaces or Traits in PHP instead of classes so that we can implement it. Traits are a type of class that enables multiple case classes, objects, classes, and traits.