首页 > 作文

PHP面向对象(一)

更新时间:2023-04-07 05:33:49 阅读: 评论:0

1 面向对象介绍

1.1 介绍

​ 面向对象是一个编思想. 编程思想有面向过程和面向对象.

​ 面向过程: 编程思路集中的是过程上

​ 面向对象: 编程思路集中在参与的对象

1.2 好处

多人合作方便

减少代码冗余, 灵活性高

代码的可用性发挥到极致

可扩展性强

oop: 面向对象编程
ooa: 面向对象分析
ood: 面向对象设计

1.2 类和对象

​ 1. 对象是具体存在的事物,对象是由属性(变量)和(方法)组成的

​ 2. 类是具体相同属性和行为的一组对象的集合

​ 在开发的时候,先写类, 通过类创建对象, 通过对象调用方法和属性

​ 一个类可以创建多个对象

2 在php中实现类和对象

2.1 创建类

class 类名{    //属性    //方法    //常量}类是由属性,方法,常量组成的_________________________________________________________________________    <?php     calss student {    }; ?>

命名规则

以字母, 下划线开头, 后面跟的是字母, 数字, 下划线

不能用php关键字做类名

类名不区分大小写 (变量名区分, 关键字,类名不区分带小写). 类名用帕斯卡命名法 (大驼峰, 首字母大写)

2.2 对象实例化

​ 通过new关键字来实例化对象

<?php     // 定义类    class student{    }    //实例化    $stu1=new student();    // 小括号可以省略    $stu2=new student;

2.3 对象的比较

对象的传递是地址传递

​ 相等: 结构和保存的值一样就相等

​ 全等: 指向同一个对象才是全等

<?php      class stu{​    }    $stu1=new stu;    $stu2=new stu;    // 对象传递的是地址    $stu3=$stu2;​    //true    var_dump($stu1==$stu2);    //fal    var_dump($stu1===$stu2);    //true    var_dump($stu2===$stu3);

3 属性 & 方法 & 修饰符

3.1 属性

​ 属性本质就是变量

​ 通过->调用对象的成员 对象名 -> 属性名 对象名 -> 方法名()

<?php      // 定义类    class stu {        public $name;        public $add='地址不详';    }    // 实例化对象    $stu=new stu;    $stu->name='tom';    $stu->add='北京';    // 获取属性的值    echo '姓名:'.$stu->name,'<br>';    echo '地址:'.$stu->add,'<br>';    // 添加属性    $stu->age=20;    echo '年龄:'.$stu->age,'<br>';    //删除属性    unt($stu->add);    print_r($stu);?>

3.2 方法​ 方法的本质就是函数
 <?php      // 定义类    class stu{        public function show() {            echo '这是show方法<br>';        }        function test(){            echo '这是test方法<br>';        }    }    // 调用方法    $stu=new stu;    $stu->show();    $stu->金榜题名的祝福语test();?>

方法前面的public是可以省略的, 如果省略, 默认是public

属性前面的public不能省略

3.3 修饰符

​ 用来控制成员的访问权限

修饰符描述public (公有的)在类的内部和外部都能访问private (私有的)只能在类的内部访问protected (受保护的)在整个继承链上访问

​ 一般来说,属性都用私有的,通过公有的方法对私有的属性进行赋值和取值

​ 作用: 保证数据的合法性

<?php      class stu{        private $name;        private $x;        function tinfo($name,$x){            if($x!='男'&&$x!='女'){                echo '性别必须为男或女';            exit;        }        $this->name=$name;        $this->x=$x;        }        function getinfo(){            echo '姓名: '.$this->name,'<br>';            echo '性别: '.$this->x,'<br>';        }    }    $stu=new stu;    $stu->tinfo('tom','男');    $stu->getinfo();    echo '<hr>';    $stu1=new stu;    $stu->tinfo('sunny','难啊难');    $stu->getinfo();?>

4 类和对象在内存中的分布

4.1 分布

对象的本质是一个复杂的变量

类的本质是一个自定义的复杂数据类型

展区: 运行速度快, 体积小, 保存基本类型

堆区: 运行速度稍慢, 体积大, 保存复杂类型

实例化的过程就是分配内存空间的过程

对象保存在堆区, 将堆区的地址保存到栈区

4.2 计算机的内存管理

​ 计算机内存管理方式: 先进先出, 先进后出

​ 先进先出的内存管理方式一般用在业务逻辑中, 比如秒杀, 购票等等

​ 先进后出是计算机的默认内存管理方式

5 构造方法 & 析构方法

5.1 介绍

​ 构造方法也叫构造函数, 当实例化对象的时候自动执行

<?php      // 前面是两个下划线    function __construct(){    }___________________________________________________________________        class stu{        function __construct(){            echo '这是构造方法<br>';张丽华        }    }    new stu();    new stu();?>

​ 在其它语言中, 与类名同名的函数时构造函数, 在php中不允许这种写法

5.2 构造函数作用

​ 初始化成员变量

​ 构造函数可以带参数, 但不能有return

<?php      class stu{        private $name;        pr文化多样性ivate $x;        function __construct($name,$x){            $this->name=$name;            $this->x=$x;        }        function show(){            echo "姓名: {$this->name}<br>";            echo "性别: {$this->x}<br>";        }    }    $stu=new stu('wang','男');    $stu->show();?>

5.3 析构方法

​ 当对象销毁的时候自动调用

​ 析构函数不可以带参数

function __destruct(){    }______________________________________________________________    <?php      class stu{        private $name;        function __construct($name){            $this->name=$name;            echo "{$name}出生了<br>";        }        function __destruct(){            echo "{$this->name}销毁了<br>";        }    }    $stu1=new stu('tom');    $stu2=new stu('wang');    echo '<hr>';?>

6 继承

6.1介绍

继承使得代码具有层次结构

子类继承父类的属性和方法, 实现代码的可重用性

使用extends关键字实现继承

父类和子类是相对的

class 子类 extends 父类{}___付款行_________________________________________________________    <?php      class person{        function show(){            echo '这是人类<br>';        }    }    // 子类继承父类    class stu extends person{    }    $stu=new stu;    $stu->show();?>  

执行过程

在stu类中查找show(), 如果找到就调用, 找不到就到父类中查找

在person类中查询show()

6.2 子类中调用父类成员

<?php      class person{        function show(){            echo '这是人类<br>';        }    }    // 子类    class stu extends person{        function test(){            // 方法一            // $person=new person();            // $person->show();                        // 方法二            $this->show();        }    }    $stu=new stu;    $stu->test();?>

通过实例化父类调用父类的成员

通过$this关键字调用父类的成员

6.3 protected

​ protected: 受保护的, 在整个继承链上使用

// 一<?php      class a{        protected $num=10;    }    class b extends a {        function getnum(){            echo $this->num;        }    }    $obj=new b();    $obj->getnum();?>______________________________________________________________________    //二<?php      class a {        function getnum(){            echo $this->num;        }    }    class b extends a {        protected $num=10;    }    $obj=new b();    $obj->getnum();?>______________________________________________________________________________    //三<?php      class a {        function getnum(){            echo $this->num;        }    }    class b extends a {        protected $num=10;    }    //整个继承链上只有a    $obj=new a();    //报错: notice:undefined property: a::$num     $obj->getnum();?>

6.4 继承中的构造函数

如果子类有构造函数就调用子类的, 如果子类没有就调用父类的构造函数

子类的构造函数调用后, 默认不再调用父类的构造函数

通过类名调用父类的构造函数

鲍照什么意思

类名::__construct()_______________________________________________________________________        <?php      class person{        public function __construct(){            echo '这是父类<br>';        }    }    class stu extends person{        public function __construct(){            person::__construct();            parent::__construct();            echo '这是子类<br>';                  }    }    new stu();?>

parent关键字表示父类的名字, 可以降低程序的耦合性

给父类传递参数

<?php      class person{        protected $name;        protected $x;        public function __construct($name,$x){            $this->name=$name;            $this->x=$x;        }    }    class stu extends person{        private $score;        public function __construct($name,$x,$score){            parent::__construct($name,$x);            $this->score=$score;        }    public function getinfo(){        echo "姓名: {$this->name}<br>";        echo "性别: {$this->x}<br>";        echo "成绩: {$this->score}<br>";        }    }    $stu=new stu('wang','男',90);    $stu->getinfo();?>

6.5 $this详解

​ this表示当前对象的引用, 也就是this保存的当前对象的地址

<?php      class a{        public function __construct(){            var_dump($this);        }    }    class b extends a {    }    new a();    echo '<br>';    new b();?>

6.6 多重继承

​ php不允许多重继承, 因为多次继承容易产生二义性.

​ 如何实现c继承a和b, 使用继承链

本文发布于:2023-04-07 05:33:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/014ca3fa255612ce3815961d059a50da.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP面向对象(一).doc

本文 PDF 下载地址:PHP面向对象(一).pdf

标签:对象   方法   子类   属性
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图