


Analysis of private attribute inheritance issues in PHP classes
Please read this sentence carefully if the parent class has private attributes. Then the method of the parent class only serves the private properties of the parent class.
The following is a series of examples to deepen understanding.
This example seems strange. An attribute $sal is redefined in the subclass, but the system returns the attributes of the parent class.
Copy code The code is as follows:
class employee{
private $sal=3000;
//protected $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getParentSal(){
//What is returned here is the private attribute of the parent class.
return parent::getSal();
}
}
$manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal();
echo "
";
echo "parent's $sal " .$manager->getParentSal();
?>
Program running results:
Copy code The code is as follows:
PHP 5.3.8
3000
parent's $sal 3000
If the attributes in the parent class are overridden by the subclass . The result is this. Note that the attribute definition in line 5 becomes protected.
Copy code The code is as follows:
class employee{
//private $sal=3000;
protected $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getParentSal(){
//What is returned here is the private attribute of the parent class.
return parent::getSal();
}
}
$ manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal();
echo "
";
echo "parent's $sal ".$manager->getParentSal();
?>
Program running results:
Copy code The code is as follows:
PHP 5.3.8
5000
parent's $sal 5000
The parent class in the first column private $sal has not been overridden, so the parent class method $manager->getSal() calls the parent class’s own private property $sal. At this time, there are two $sal in the memory
The parent class’s in the second column protected $sal is overridden $manager->getSal() The method of this parent class calls the overridden $sal. The $sal of the parent class does not exist in the memory. At this time, there is only one $sal in the memory
Next Look at the third example
The overridden method in the subclass is valid for the current private.
Copy code The code is as follows:
class employee{
private $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
private $sal=5000;
//Rewritten method
public function getSal(){
return $this->sal;
}
public function getParentSal(){
//What is returned here is the private attribute of the parent class .
return parent::getSal();
}
}
$manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal() ;
echo "
";
echo "parent's $sal ".$manager->getParentSal();
?>
Run results
Copy code The code is as follows:
PHP 5.3.8
5000
parent's $sal 3000
In this example, the subclass overrides the getSal() method so it calls the properties of the subclass
If you comment this line of the subclass
//private $sal=5000;
You will find an error: Notice: Undefined property: Manager::$sal in E:wampwwwoo2-52-5-3.php on line 14
If you comment out the subclass rewrite method on line 12, then echo $manager->getSal(); will be obtained The result is the private attribute $sal 3000 of the parent class.
Open the zend debugging state to see what is going on in the memory. Note that there are two $sal at the bottom. They are 3000 and 5000 respectively.
Copy code The code is as follows:
class employee{
private $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $ sal=5000;
public function getParentSal(){
return $this->sal;
}
}
$manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal();
?>
Program running results:
Copy the code The code is as follows:
PHP 5.3.8
3000
Change the parent class’s attribute $sal to protected , and the subclass overrides the parent class’s attributes. There is only one $sal in memory.
Copy code The code is as follows:
class employee{
protected $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $ sal=5000;
public function getParentSal(){
return $this->sal;
}
}
$manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal();
?>
Program running results:
Copy code The code is as follows:
PHP 5.3.8
5000
If you have learned java, you will think that all this is It's hard to understand.
In Java, when a subclass is created, the properties and methods of the parent class are created in memory, and even the constructor is called.
This is not the case with PHP5. PHP5 uses parent:: instead of parent-> when calling the parent class. This is enough to show that PHP5 does not want the parent class to be created in memory. PHP5 wants to make inheritance simpler than Java.
Just get used to it.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
