PHP面向对象(一)
1.1 介绍? 面向对象是一个编思想. 编程思想有面向过程和面向对象. ? 面向过程: 编程思路集中的是过程上 ? 面向对象: 编程思路集中在参与的对象 1.2 好处
1.2 类和对象? 1. 对象是具体存在的事物,对象是由属性(变量)和(方法)组成的 ? 2. 类是具体相同属性和行为的一组对象的集合 ? 在开发的时候,先写类,通过类创建对象,通过对象调用方法和属性 ? 一个类可以创建多个对象 ? 2 在PHP中实现类和对象2.1 创建类class 类名{ //属性 //方法 //常量 } 类是由属性,方法,常量组成的 _________________________________________________________________________ <?php calss Student { }; ?> ? 命名规则
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); //false 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>‘; //删除属性 unset($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(); ?>
?
3.3 修饰符? 用来控制成员的访问权限
? 一般来说,属性都用私有的,通过公有的方法对私有的属性进行赋值和取值 ? 作用: 保证数据的合法性 <?php class Stu{ private $name; private $sex; function setInfo($name,$sex){ if($sex!=‘男‘&&$sex!=‘女‘){ echo ‘性别必须为男或女‘; exit; } $this->name=$name; $this->sex=$sex; } function getInfo(){ echo ‘姓名: ‘.$this->name,‘<br>‘; echo ‘性别: ‘.$this->sex,‘<br>‘; } } $stu=new Stu; $stu->setInfo(‘tom‘,‘男‘); $stu->getInfo(); echo ‘<hr>‘; $stu1=new Stu; $stu->setInfo(‘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; private $sex; function __construct($name,$sex){ $this->name=$name; $this->sex=$sex; } function show(){ echo "姓名: {$this->name}<br>"; echo "性别: {$this->sex}<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介绍
class 子类 extends 父类{ } ____________________________________________________________ <?php class Person{ function show(){ echo ‘这是人类<br>‘; } } // 子类继承父类 class Stu extends Person{ } $stu=new Stu; $stu->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(); ?>
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 $sex; public function __construct($name,$sex){ $this->name=$name; $this->sex=$sex; } } class Stu extends Person{ private $score; public function __construct($name,$sex,$score){ parent::__construct($name,$sex); $this->score=$score; } public function getInfo(){ echo "姓名: {$this->name}<br>"; echo "性别: {$this->sex}<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,使用继承链 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |