Learn the three major characteristics of PHP object-oriented
PHP’s three major characteristics of object-oriented learning Learning goals: Fully understand abstraction, encapsulation, inheritance, and polymorphism
The three major characteristics of object-oriented: encapsulation, inheritance, and polymorphism First, simply understand Let’s talk about abstraction:
When we defined a class earlier, we actually extracted the common attributes and behaviors of a class of things to form a physical model (template). This method of studying problems is called abstraction
1. Encapsulation
Encapsulation is to encapsulate the extracted data and operations on the data together. The data is protected internally, and other parts of the program only have authorized operations. (Method) to operate on 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:
<?php 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(){ //这表示三个修饰符都可以在本类内部使用 echo $this->name."||".$this->age."||".$this->salary; } } $p1=new Person('张三',20,3000); //这里属于类外部,那么如果用下面的方法访问age和salary都会报错 // echo $p1->age; echo$p1->salary; ?>
So what should I do if I want to access protected and private elements and methods externally? The usual approach is to access these variable formats through public functions:
public function setxxxx($val){
$this->xxxx=$val;
}
public function getxxxx(){
return $this->xxxx;
}
The set and get here are just for the convenience of identification, not necessary.
For example:
public function getsalary(){
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, as long as you understand them
__set() and __get()
__set() assigns 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:
<?php class testa{ protected $name; //使用__set()来管理所有属性 public function __set($pro_name,$pro_val){ //上面$pro_name和$pro_val可自定义 //下面$this->pro_name为既定,不可更改 $this->pro_name=$pro_val; } //使用__get()来获取所有属性值 public function __get($pro_name){ if(isset($pro_name)){ return $this->pro_name; } else { return null; } } } $n1=new testa(); //正常情况,类外部是不能访问protected属性的,但是用了上面的方法就可以对它们进行操作 $n1->name='小三'; echo $n1->name; ?>
//Just understand the above code, it is not recommended to use
2. Inheritance
Let’s look at an example first:
Copy code The code is as follows:
<?php 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 properties and methods, the reusability of the code is not high. Code redundancy, think about the processing method in css
Solution: Inherit
Copy code The code is as follows:
<?php 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 '<br/>'; $stu1->testing(); ?>
As can be seen from the above, Inheritance means that a subclass (Subclass) inherits the public and protected attributes and methods of the parent class (BaseClass) through extends the parent class. Private attributes and methods cannot be inherited.
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 properties and methods of multiple classes , you can use multi-layer inheritance
Example:
Copy code The code is as follows:
<?php class A{ public $name='AAA'; } class B extends A{ public $age=30; } class C extends B{} $p=new C(); echo $p->name;//这里会输出AAA ?>
2. When creating a subclass object, by default The constructor of its parent class will not be automatically called
Example:
class A{
public function __construct(){
echo 'A';
}
}
class B extends A{
public function __construct(){
echo 'B';
}
}
$b=new B();//Here B will be output first Constructor, if there is no constructor in B,
in A will be output. 3. If you need to access the method of the parent class in the subclass (the modifier of the constructor and member method is protected or private), you can use Parent class::method name or parent::method name to complete [Here parent and the previously mentioned self are both 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 are OK
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 (override), see the following polymorphism
3. Polymorphism
Example:
Copy code The code is as follows:
<?php class Animal{ public $name; public $price; function cry(){ echo 'i don\'t know'; } } class Dog extends Animal{ //覆盖、重写 function cry(){ echo 'Wang Wang!'; Animal::cry();//这里不会报错,能正确执行父类的cry(); } } $dog1=new Dog(); $dog1->cry(); ?>
小结:
1、当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法如何写,可以让子类去覆盖它的方法,方法覆盖(重写),必须要求子类的方法名和参数个数完全一致
2、如果子类要去调用父类的某个方法(protected/public),可以使用 父类名::方法名 或者 parent::方法名
3、在实现方法重写的时候,访问修饰符可以不一样,但是子类方法的访问权限必须大于等于父类方法的访问权限(即不能缩小父类方法的访问权限)
如 父类public function cry(){} 子类 protected function cry(){} 则会报错
但是子类的访问权限可以放大,如:
父类private function cry(){} 子类 protected function cry(){} 可以正确执行
扩展:
方法重载(overload)
基本概念:函数名相同,但参数的个数或参数的类型不同,达到调用同一个函数,可以区分不同的函数
在PHP5中虽然也支持重载,但是和其它语言还是有很大区别的,php中不能定义多个同名函数
PHP5中提供了强大的“魔术”函数,使用这些魔术函数,我们可以做到函数重载,
这里我们要到到 __call,当一个对象调一个方法时,而该方法不存在,则程序会自动调用__call
【官方不推荐使用】
PHP中有以下几个魔术常量:__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ 等
例:
复制代码 代码如下:
<?php class A{ function test1($p){ echo 'test1<br/>'; } function test2($p){ echo 'test2<br/>'; } function __call($method,$p){ //这里$p为数组,上面两个变量名可自定义 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); ?>
相关推荐:
PHP面向对象五大原则之依赖倒置原则(DIP)详解_php技巧
The above is the detailed content of Learn the three major characteristics of PHP object-oriented. For more information, please follow other related articles on the PHP Chinese website!

Python and C each have their own advantages, and the choice should be based on project requirements. 1) Python is suitable for rapid development and data processing due to its concise syntax and dynamic typing. 2)C is suitable for high performance and system programming due to its static typing and manual memory management.

Choosing Python or C depends on project requirements: 1) If you need rapid development, data processing and prototype design, choose Python; 2) If you need high performance, low latency and close hardware control, choose C.

By investing 2 hours of Python learning every day, you can effectively improve your programming skills. 1. Learn new knowledge: read documents or watch tutorials. 2. Practice: Write code and complete exercises. 3. Review: Consolidate the content you have learned. 4. Project practice: Apply what you have learned in actual projects. Such a structured learning plan can help you systematically master Python and achieve career goals.

Methods to learn Python efficiently within two hours include: 1. Review the basic knowledge and ensure that you are familiar with Python installation and basic syntax; 2. Understand the core concepts of Python, such as variables, lists, functions, etc.; 3. Master basic and advanced usage by using examples; 4. Learn common errors and debugging techniques; 5. Apply performance optimization and best practices, such as using list comprehensions and following the PEP8 style guide.

Python is suitable for beginners and data science, and C is suitable for system programming and game development. 1. Python is simple and easy to use, suitable for data science and web development. 2.C provides high performance and control, suitable for game development and system programming. The choice should be based on project needs and personal interests.

Python is more suitable for data science and rapid development, while C is more suitable for high performance and system programming. 1. Python syntax is concise and easy to learn, suitable for data processing and scientific computing. 2.C has complex syntax but excellent performance and is often used in game development and system programming.

It is feasible to invest two hours a day to learn Python. 1. Learn new knowledge: Learn new concepts in one hour, such as lists and dictionaries. 2. Practice and exercises: Use one hour to perform programming exercises, such as writing small programs. Through reasonable planning and perseverance, you can master the core concepts of Python in a short time.

Python is easier to learn and use, while C is more powerful but complex. 1. Python syntax is concise and suitable for beginners. Dynamic typing and automatic memory management make it easy to use, but may cause runtime errors. 2.C provides low-level control and advanced features, suitable for high-performance applications, but has a high learning threshold and requires manual memory and type safety management.


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

Dreamweaver Mac version
Visual web development tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software