Home Backend Development PHP Tutorial Learn the three major characteristics of PHP object-oriented (fully understand abstraction, encapsulation, inheritance, polymorphism)_PHP tutorial

Learn the three major characteristics of PHP object-oriented (fully understand abstraction, encapsulation, inheritance, polymorphism)_PHP tutorial

Jul 21, 2016 pm 03:18 PM
php Polymorphism study right object encapsulation abstract Features understand of inherit For

The three major characteristics of object-oriented objects: encapsulation, inheritance, and polymorphism. First, let’s briefly understand abstraction:
When we defined a class earlier, we actually extracted the common attributes and behaviors of a class of things. , forming a physical model (template), this method of studying the problem is called abstraction
Learn the three major characteristics of PHP object-oriented (fully understand abstraction, encapsulation, inheritance, polymorphism)_PHP tutorial
1. Encapsulation
Encapsulation is to combine the extracted data with the data The operations are encapsulated together, the data is protected internally, and only authorized operations (methods) in other parts of the program can operate on the data.
php provides three access control modifiers
public means global, accessible inside this class, outside the class, and subclasses
protected means protected, only this class or subclasses can access
private means private and can only be accessed within this class
The above three modifiers can modify both methods and properties (variables). If the method does not have access modifiers, it defaults to public. Member properties must specify access modifiers. , there is also this way of writing var $name in PHP4, which means public attributes. This way of writing is not recommended.
Example:

Copy code The code is as follows:

class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age ,$salary){
$this->name=$name;
$this->age=$age;
$this->salary=$salary;
}
public function showinfo(){
//This means that all three modifiers can be used inside this class
echo $this->name."||".$this->age."| |".$this->salary;
}
}
$p1=new Person('Zhang San',20,3000);
//This is outside the class, so if you use The following methods will report errors when accessing age and salary.
// echo $p1->age; echo$p1->salary;
?>

Then what I want to do now is What to do when accessing protected and private elements and methods from outside? The usual approach is to access these variable formats through public functions:
public function setxxxx($val){
$this->xxxx=$val;
}
public function getxxxx(){
return $this-> >salary; //Extension: You can call some methods here, such as judging the user name, etc., and only give access if it is correct
}
You can use echo from the outside $p1->getsalary();
If To access protected and private, you can also use the following methods, but they are not recommended. Just understand them
__set() and __get()
__set() assign values ​​to protected or private attributes
__set( $name,$val);
__get() gets the value of protected or private
__get($name);
For example:



Copy code

The code is as follows:
class testa{ protected $name;
//Use __set() to manage all attributes
public function __set($pro_name,$pro_val){
//$pro_name and $pro_val above can be customized
//$this->pro_name below is established and cannot be changed
$this->pro_name =$pro_val;
}
//Use __get() to get all attribute values ​​
public function __get($pro_name){
if(isset($pro_name)){
return $this->pro_name;
} else {
return null;
}
}
}
$n1=new testa();
//Normal situation, Protected attributes cannot be accessed outside the class, but you can operate them using the above method
$n1->name='小三';
echo $n1->name;
? >


//You can understand the above code, but it is not recommended to use it

2. Inheritance
Let’s look at an example first:

Copy code

The code is as follows:
class Pupil{ public $name;
protected $age;
public function getinfo(){
echo $this->name.'||'.$this->age;
}
public function testing(){
echo 'this is pupil';
}
}
class Graduate{
public $name;
protected $age;
public function getinfo(){
echo $this-> name.'||'.$this->age;
}
public function testing(){
echo 'this is Graduate';
}
}
?> ;


As can be seen from the above example, when multiple classes have many common attributes and methods, the code reusability is not high and the code is redundant. Think about the processing method in CSS
Solution: Inherit


Copy code

The code is as follows:

class Students{
public $name;
public $age;
public function __construct($name,$age){
$this- >name=$name;
$this->age=$age;
}
public function showinfo(){
echo $this->name.'||'.$ this->age;
}
}
class Pupil extends Students{
function testing(){
echo 'Pupil '.$this->name.' is testing';
}
}
class Graduate extends Students{
function testing(){
echo 'Graduate '.$this->name.' is testing';
}
}
$stu1=new Pupil('张三',20);
$stu1->showinfo();
echo '
';
$stu1- >testing();
?>

As can be seen from the above, inheritance is a subclass (Subclass) extending the parent class to the public and protected in the parent class (BaseClass) The attributes and methods continue and cannot inherit private attributes and methods
Syntax structure:
class parent class name {}
class subclass name extends parent class name {}
Details:
1 , a subclass can only inherit one parent class (here refers to direct inheritance); if you want to inherit the attributes and methods of multiple classes, you can use multi-level inheritance
Example:
Copy the code The code is as follows:

class A{
public $name='AAA';
}
class B extends A{
public $age=30;
}
class C extends B{}
$p=new C();
echo $p->name;//here AAA will be output
?>

2. When creating a subclass object, the constructor of its parent class will not be automatically called by default
Example:
class A{
public function __construct(){
echo 'A';
}
}
class B extends A{
public function __construct(){
echo 'B ';
}
}
$b=new B();//The constructor in B will be output first. If there is no constructor in B, the
in A will be output. 3. If you need to access the methods of the parent class in a subclass (the modifiers of constructors and member methods are protected or private), you can use parent class::method name or parent::method name to complete [here parent and the previous premise] The self received are all lowercase, and an error is reported in uppercase]
class A{
public function test(){
echo 'a_test';
}
}
class B extends A{
public function __construct(){
//Both methods will work
A::test();
parent::test();
}
}
$b=new B();
5. If the method of a subclass (derived class) is exactly the same as the method of the parent class (public, protected), we call it method coverage or method override. Look at the polymorphism below
3. Polymorphism
Example:
Copy the code The code is as follows:

class Animal{
public $name;
public $price;
function cry(){
echo 'i don't know' ;
}
}
class Dog extends Animal{
//Override, override
function cry(){
echo 'Wang Wang!';
Animal:: cry();//No errors will be reported here, and the cry() of the parent class can be executed correctly;
}
}
$dog1=new Dog();
$dog1->cry( );
?>

Summary:
1. When a parent class knows that all subclasses have a method, but the parent class is not sure how to write the method, you can let For a subclass to override its method, method overriding (rewriting) must require that the method name and number of parameters of the subclass are exactly the same
2. If the subclass wants to call a method of the parent class (protected/public), You can use parent class name::method name or parent::method name
3. When implementing method rewriting, the access modifiers can be different, but the access rights of the subclass method must be greater than or equal to the access of the parent class method. Permissions (that is, the access permissions of the parent class method cannot be reduced)
For example, if the parent class public function cry(){} and the subclass protected function cry(){} will report an error
But the access permissions of the subclass can be enlarged, such as :
Parent class private function cry(){} subclass protected function cry(){} can execute correctly
Extension:
Method overload (overload)
Basic concept: The function name is the same, but The number of parameters or the type of parameters are different. When the same function is called, different functions can be distinguished
Although overloading is also supported in PHP5, it is still very different from other languages. Multiple functions cannot be defined in PHP. The function of the same name
PHP5 provides powerful "magic" functions. Using these magic functions, we can overload functions.
Here we have to go to __call, when an object calls a method, and the If the method does not exist, the program will automatically call __call
[Officially not recommended]
There are the following magic constants in PHP: __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ etc.
Example:
Copy code The code is as follows:

class A{
function test1($p){
echo 'test1
';
}
function test2($ p){
echo 'test2
';
}
function __call($method,$p){
//Here $p is an array, and the above two variable names can Customized
if($method == 'test'){
if(count($p)==1){
$this->test1($p);
} else if(count($p)==2){
$this->test2($p);
}
}
}
}
$a=new A ();
$a->test(5);
$a->test(3,5);
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/325493.htmlTechArticleThe three major characteristics of object-oriented objects: encapsulation, inheritance, and polymorphism. First, let’s briefly understand abstraction: When we defined a class earlier, we actually combined the attributes common to a class of things...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

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

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

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

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

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

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

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,

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

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

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

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

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

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 PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

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.

See all articles