Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:
OOP全称object oriented progrmming 面向对象编程
和面向对象编程不同的是面向过程编程。面向过程编程是直接面向 变量 和函数 编程,没有类和封装。
oop直接面向对象编程,封装了变量和函数的一个编程单元。be本质是封装,目标是代码复用
首先声明一个类文件,声明的类与这个类所在的文件推荐同名
class Product{
//属性
//protected 受保护成员,仅限本类以及子类访问
protected $name;
//private 私有成员,仅限本类中的使用
private $price;
//函数
//构造方法
public function __construct($name,$price)
{
//初始化类成员,让类/实例化状态确定下来
//生成类的实例
//2.给这个新类复制属性
$this->name=$name;
$this->price=$price;
//return $obj;
}
//实例方法
public function show():string
{
return "$this->name:$this->price";
}
}
spl_autoload_register(function($class){
require $class.'.php';
});
引用后require 包含这个函数的文件后,当前也new的对象自动调用这个函数,
注意:类名应和文件名一致,才起作用
//类的静态成员
//类中成员,属性和方法
//类中成员并非全部都要使用类实例方法,也可直接使用类访问成员
//这个就是静态成员
class Staff{
public static $name;
public static $salary;
public function __construct($name,$salary)
{
//静态成员与实例无关,当然不能使用$this访问,用类的引用
//self:当前类的引用
self::$name=$name;
self::$salary=$salary;
}
//静态方法
public static function show(){
return 'self::$name, self::$salary';
}
}
注意:类实例可以访问静态方法,但不能访问静态属性
extends 继承,子类只能继承一个父类,可以调用父类除了私有权限的所有属性和方法。也可以自己定义函数方法和属性。
trait 理解为一个公共方法集。
trait 借用了class语法实现的一个轻量级的类,但不是类,所以不能实例化
trait声明一个类,在调用它是只需要在本类中使用use trait声明的类明即可。
一个类中可以调用多个trait。如果trait之间有同名方法,可以设定优先级,或者别名
当trait和父类中有同名方法是,trait优先级比父类高。
trait T1
{
public function m1()
{
return __METHOD__;
}
}
trait T2
{
public function m1()
{
return __METHOD__;
}
}
class A{
//在要使用trait的类中,使用use关键字引用它即可
use T1;
}
class B{
use T1,T2{
//优先级
T1::m1 insteadOf T2;
//别名
T2::m1 as T2m1;
}
}
echo (new A)->m1();
echo (new B)->m1();
//如果要引用多个trait
// 1.优先级
// 2.起别名
echo (new B)->T2m1();