批改状态:合格
老师批语:
1、对象是具体存在的事物,对象是由属性(变量)和方法(函数)组成的
2、类是具有相同属性和行为的一组对象的集合
创建类
语法:class 类名{ //属性 //方法 //常量 }
类是由属性、方法、常量组成的,也可以说
类成员有:属性、方法、常量
类名的命名规则:
以字母、下划线开头,后面跟的是字母、数字、下划线
不能用PHP关键字做类名
类名不区分大小写(变量名区分,关键字、类名不区分大小写)
类名用帕斯卡命名法(大驼峰 单词的首字母大写
对象实例化
通过new关键字来实例化对象。
构造方法也叫构造函数,当实例化对象的时候自动执行。 语法:
function __construct(){ }
注意:前面是两个下划线
构造函数作用:初始化成员变量
注意:构造函数可以带参数,但不能有return。
class Student{private $name;private $sex;//构造函数初始化成员变量public function __construct($name,$sex){$this->name=$name;$this->sex=$sex;}//显示信息public function show(){echo "姓名:{$this->name}<br>";echo "性别:{$this->sex}<br>";}}//实例化$stu=new Student('tom','男');$stu->show(); //输出 姓名:tom 性别:男
$this表示当前对象的引用,也就是$this保存的当前对象的地址
class A{public $sttr;public function getSttr(){return $this->sttr;}}$a = new A();$a->sttr = '属性';echo $a->getSttr(); //输出 属性
访问修饰符
用来控制成员的访问权限
| 修饰符 | 描述 |
|---|---|
| public(公有的) | 在类的内部和外部都能访问 |
| private(私有的) | 只能在类的内部访问 |
| protected(受保护的) | 在整个继承链上访问 |
一般来说,属性都用私有的,通过公有的方法对私有的属性进行赋值和取值。
class Animal{// 公有public $name;// 保护protected $type;// 私有private $dna;// 构造方法public function __construct($name,$type,$dna){$this->name = $name;$this->type = $type;$this->dna = $dna;}// 公有方法对私有属性取值public function getDna(){return $this->dna;}}// 子类extend继承class Dog extends Animal{ // 子类未定义构造方法,默认调用父类的// 子类通过公有方法对保护属性取值public function getType(){return $this->type;}public function getDna(){parent::getDna();}}// 子类对象$husky = new Dog('哈士奇','husky','002001');echo $husky->name; //输出 '哈士奇'//echo $husky->type; //错误//echo $husky->dna; //错误echo $husky->getDna(); // 无输出,子类拿不到父类的私有echo $husky->getType(); // 输出 husky// 父类对象$cat = new Animal('mimi','cat','001');echo $cat->getDna(); // 输出002
类的规则
一个文件中只能放一个类(必须)
文件名和类名同名(必须)
类文件以.class.php结尾(不是必须
手动加载类require ‘类文件路径’
自动加载类
当缺少类的时候自动的调用autoload()函数,并且将缺少的类名作为参数传递给autoload()。
function __autoload($class_name){require $class_name.'php';}
spl_autoload_register($callback)注册__autoload()函数
spl_autoload_register(function ($class_name){require $class_name.'.php';});
可以注册多个自动加载函数
spl_autoload_register('load1');spl_autoload_register('load2');spl_autoload_register('load3');function load1($className){require $className.'.php';}function load2($className){require $className.'.class.php';}function load3($className){require $className.'.fun.php';}
static修饰的属性叫静态属性、static修饰的方法叫静态方法
静态成员加载类的时候分配空间,程序执行完毕后销毁
静态成员在内存中就一份。
调用语法 类名::属性 类名::方法名()self表示所在类的类名,使用self降低耦合性
class Cat{//静态属性static $type;//静态方法设置静态属性public static function setType($type){self::$type = $type;}//静态方法获得静态属性public static function getType(){return self::$type;}}Cat::$type = '波斯猫';echo Cat::$type; //输出 波斯猫Cat::setType('招财猫');echo Cat::getType(); //输出 招财猫
- 继承介绍
继承使得代码具有层次结构
子类继承了父类的属性和方法,实现了代码的可重用性。
使用extends关键字实现继承
父类和子类是相对的
语法 :class 子类 extends 父类{ }- 子类中调用父类成员
1、方法一:通过实例化父类调用父类的成员
2、方法二:通过$this关键字调用父类的成员- protected
protected:受保护的,在整个继承链上使用- 继承中的构造函数
规则:
1、如果子类有构造函数就调用子类的,如果子类没有就调用父类的构造函数。
2、子类的构造函数调用后,默认不再调用父类的构造函数
可通过parent调用父类的构造函数
parent::__construct()- $this详解
$this表示当前对象的引用,也就是$this保存的当前对象的地址- 多重继承
PHP不允许多重继承,因为多重继承容易产生二义性
如何实现C继承A和B,使用继承链
// 父类class Human{public $name;public function __construct($name){$this->name = $name;}public function say(){return $this->name.' say: hello!';}}// 子类class Chinese extends Human{private $nationality = 'CN';private $ethnicity;public function __construct($name,$ethnicity){// 调用父类构造方法后, 加入自parent::__construct($name);$this->ethnicity = $ethnicity;}// 重写父类say方法public function say(){return parent::say() . "你好?";}// 获得属性public function getAttr(){return "国籍:{$this->nationality},民族:{$this->ethnicity}";}}// 实例化子类$people = new Chinese('张三', '汉');echo $people->name; //输出 张三echo $people->say(); //输出 张三say:hello!你好?echo $people->getAttr(); //输出 国籍:CN,民族:汉
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号