PHP高级
1、PHP高级语法
类和对象语法
继承
魔术方法
常量、静态属性和方法
抽象类
接口
trait
命名空间
异常处理
PDO
2、PHP高级实战
验证码类
分页类
文件上传类
图像处理类
数据库操作类
模板测试类
设计模式
自己搭建MVC框架
3、JavaScript
DOM操作
定时器
常见效果
ajax
jQuery


PHP高级语法-类和对象

类和对象的概念和简单使用

图片.png
我们已经熟悉了用面向过程的思路去解决问题,现在我们要转为面向对象去解决
图片.png
对象要具体到真正的实物,宝马、路虎不是对象,它还是一个类,你的宝马就是一个对象了
类是对象的抽象,对象是类的具象
人类具有属性和行为,对应到代码中就是变量和方法
在面向过程的语言中,我们都叫做函数,在面向过程的语言中我们把函数习惯叫做方法

  1. <?php
  2. 人类{
  3. 年龄;//属性(变量)
  4. 吃饭;//行为(方法)
  5. }

图片.png

  1. <?php
  2. /*
  3. 人类{
  4. 年龄;//属性
  5. 吃饭;//方法
  6. }*/
  7. //定义类
  8. class Person //类名遵从大驼峰原则(大驼峰是每个单词首字母大写,小驼峰是首个单词首字母小写,其他单词首字母都大写)
  9. {
  10. public $age;//属性对应到类里面就是变量 //叫成员属性
  11. public function eat()//行为对应到类里面就是方法 //叫成员方法
  12. {
  13. echo '我在吃饭';
  14. }
  15. }
  16. //如何通过类来定义一个具体的对象呢?在PHP中写法如下:
  17. //定义对象的第一种方法:
  18. $xiaoming = new Person(); // new 类名称(),这个小括号可加可不加,建议加
  19. var_dump($xiaoming); //object(Person)#1 (1) { ["age"]=> NULL }
  1. //定义对象的第二种方法:可以通过一个类名字符串直接定义一个对象
  2. $name='Person';//我们将Person给到一个变量当中
  3. $xiaoming=new $name();//然后通过这个变量去实例化一个对象

现在我们对象已经创建,xiaoming肯定有年龄,和eat方法,下面打印xiaoming年龄:
对象访问属性和方法

  1. //然后通过对象访问自己的属性和方法?
  2. var_dump($xiaoming->age);//null 对象访问自己属性的时候前面不加$ 这种访问属性叫做读取属性的值
  3. //当然我们也可以设置属性
  4. $xiaoming->age=18;
  5. var_dump($xiaoming->age);//18
  6. //我们上面通过->连接符可以去访问里面创建属性,怎么来调用里面方法呢?
  7. $xiaoming->eat();//这里写函数名以()结尾,这样就会执行对象中的eat方法

注意访问属性名前面没有$,调用方法要以()结尾

构造方法和this关键字

  1. <?php
  2. //定义类
  3. class Person
  4. {
  5. public $name;
  6. public $age;
  7. public function eat()
  8. }
  9. //创建对象
  10. $ming=new Person();
  11. $ming->name='小明';
  12. $ming->age=20;
  13. var_dump($ming);
  14. $niu=new Person();
  15. $niu->name='小牛';
  16. $niu->age=18;
  17. var_dump($niu);
  18. //上面这样给对象里面的属性赋值很麻烦,有没有什么方法在我们直接创建对象的时候,给我们对象里面的属性进行初始化呢?
  19. //有,就是构造方法

图片.png

  1. <?php
  2. //定义类
  3. class Person
  4. {
  5. public $name;
  6. public $age;
  7. public function __construct(){
  8. echo '小样,调用我了吧';
  9. }
  10. }
  11. $ming=new Person();
  12. $niu=new Person();

图片.png
我们想给ming里面的age和name属性给一定的初始值,我们就要通过构造方法传参进行赋值:

  1. class Person
  2. {
  3. public $name;//成员属性
  4. public $age;
  5. public function __construct($name,$age){
  6. //echo '小样,调用我了吧';
  7. //下面我的工作就是将$name和$age的值给到自己的name
  8. //在类里面如何访问自己的成员属性?关键字$this,代表的就是当前对象
  9. $this->name=$name;//当前对象去访问自己的成员属性
  10. $this->age=$age;
  11. }
  12. }
  13. $ming=new Person('小明',20);//这样当你创建对象时候,小明 20就会被传到构造方法的两个形参变量里面去
  14. $niu=new Person('小牛',18);
  15. var_dump($ming);
  16. var_dump($niu);
  17. /*
  18. object(Person)#1 (2) {
  19. ["name"]=>
  20. string(6) "小明"
  21. ["age"]=>
  22. int(20)
  23. }
  24. object(Person)#2 (2) {
  25. ["name"]=>
  26. string(6) "小牛"
  27. ["age"]=>
  28. int(18)
  29. }
  30. */

这里面的$this就是当前对象,你在新建小明的时候,$this就是$ming,你在新建小牛的时候$this就是$niu,我们通过this访问自己的成员属性。
因为我们成员属性和成员方法的访问都是通过对象来访问的,那么在类里怎么找到这个对象?就是this关键字

  1. <?php
  2. class Person
  3. {
  4. public $name;
  5. public $age;
  6. public function __construct($name,$age){
  7. $this->name=$name;
  8. $this->age=$age;
  9. }
  10. public function test1(){
  11. echo '今天天气真好<br />';
  12. }
  13. public function test2(){
  14. $this->test1();//在类里面调用成员方法
  15. echo '我想约女朋友去看电影<br />';
  16. }
  17. }
  18. $niu=new Person('小牛',20);
  19. $niu->test2();
  20. //所以在构造方法中,我们通过this拿到自己的成员属性,再将传递过来的值赋值给它,这样就完成了对象的初始化!