一、面向对象的基本概念
1、什么是面向对象
面向对象 = 对象+ 面向
对象:世间万物接对象,比如一个人,一本书,一台电脑,一个篮球
面向:本意就是朝向,在编程的时候心里要有对象。
面向对象:在编程的时候通过对象的方式,解决实际问题。(对象的方式来存储数据结构)
对象的组成:(1) 对象元素:对应属性 (2) 对象行为:对应方法
比如一个桌子,四个角、一个平面是属性,移动是桌子表现的行为
对象的特点:1、独一无二的 2、每个对象都有不同的作用 3、对象可以重复使用。
2、为什么要面向对象
对象的描述方式更加切合生活实际情况,有利于解决大型业务;
在程序中使用对象,拉近了程序和生活的距离,更加有利于解决实际问题;
3、面向对象的思路
第一步:识别对象 任何一个实体可以做为一个对象
第二步:识别对象属性 对象组成元素
第三步:识别对象方法(行为)对象操作自己属性、对象和外部对象交互
4、面向对象的基本原则
对象内部高内聚---每个对象都有特定的职能;对象相关的都封装到对象内部;
外部低耦合---外部不能看到对象全部属性;外部可以看到对象能做的部分事情(行为);
二、面向对象基本实践
1、类
物以类聚,把所有相似的对象,归类到一个类中;
类定义,这些相似对象拥有的相同属性和方法;
类的实例化,就是生成一个特定的对象。
类的属性和方法,统称为类的成员。
2、实例化
通过类创建一个特定的对象。
3、构造函数
对象实例化的时候动调用,php只能有一个
4、析构函数
程序执行完成后自动执行,通过把对象设置成null,并且对象不再使用,可以触发析构函数的调用,通 常被用于清理程序资源。
5、对象引用
对象的引用用于访问对象的熟悉和方法,james,james1,james2,三个都是对象的引用。
james,james1是两个对立的引用,都指向同一个对象。(=)
james2是james的影子,指向同一个对象。两者只要任何一个赋值为null,就会删除引用。
示例代码
//第一个类,NBA球员(统称) class NBApalyer{ public $name; public $age; public $sex; function __construct($name, $age, $sex){ $this->name = $name; $this->age = $age; $this->sex = $sex; } function run(){ echo $this->name."run...<br>"; } function jump(){ echo $this->name."run...<br>"; } function fly(){ echo $this->name."run...<br>"; } function __destruct(){ echo "destory destruct ".$this->name."<br>"; } } header("Content-type:text/html;charset=utf-8"); //实例化 kobe //$kobe = new NBApalyer(); //$kobe->name = "科比"; //$kobe->age = 39; //$kobe->sex = "male"; //构造函数 $joker = new NBApalyer("教科", 26, "female"); $joker->run(); //这种没有触发析构函数,因为对象还在被joker1使用 //$joker1 = $joker; //$joker = null; //触发析构函数执行,当对象不再被使用的时候 //这种,只要有一个为null,就执行析构函数。 $joker2 = &$joker; $joker = null;//$joker2 = null; echo "program is over<br>";
三、面向对象高级实践
1、继承
好处:父类中定义的属性和方法,不用再子类中重复定义。
同一个父类的子类拥有相同的属性和方法,外部可以使用相同的调用方式。
子类可以调整或修饰父类定义的成员
2、访问控制
public:公共的,任何地方都可以访问
private:私有的,只能在本类访问
protected:受保护的,只能在子类或本类访问
3、static关键字
修饰属性和方法,
1、静态属性只能在静态方法中访问,静态方法只能访问静属性。(self)
2、类的多个实例化对象,只要一个对象修改了,静态属性,其它对象一并修改。(共享)
3、 静态属性和静态方法可以直接访问
4、重写
重写父类的方法
5、final关键字
修饰类、方法,不能被继承和重写
6、接口
只能定义没有实现的方法
7、多态
一个接口可以有很多个实现类,这些实现类的展现,就属于类的多态。
8、抽象
可以定义没有实现的方法,也可以定义实现的方法
示例代码
<?php class Base{ public $name="base name"; public $age; function week(){ echo "base week...<br>"; } //子类不能重写 final function dispaly(){ } } class Child extends Base{ public $sex; public static $table = "桌子"; public $name="child name"; function jump(){ echo "jump...".$this->name."<br>"; } //静态属性只能在静态方法中访问,静态方法只能访问静属性。通过self访问 public static function sleep(){ echo self::$table."<br>"; } //重写父类方法 function week(){ echo "child week...<br>"; } } header("Content-type:text/html;charset=utf-8"); //继承 $c = new Child(); $c->jump(); $c->week(); $c2 = new Child(); Child::$table = "椅子"; Child::sleep();
四、面向对象魔术方法
1、 __construct(),__destruct()
2、__toString()
当对象当做string使用,这个方法自动调用。 echo $object;如果没有这个方法像这样使用会报错
3、__invoke()
当对象当做方法调用的时候,这个方法自动调用。$objet(4);如果没有这个方法像这样使用会报错。 php5.3新增
4、__call(),__callStatic()
__call(),当对象访问不存在的方法的时候调用。
__callStaic(),对象访问不存在的静态方法的时候调用。
这两个方法在php中,被称为重载(overloading)区别重写(overwrite),调用不存在没有这两个方法就会报错
5、__get(),__set(),__isset(),__unset()
__get(),读取不可以访问属性是,调用。(private或不存在)
__set(),修改不可访问属性的时候,调用。(privateprivate或不存在)
__isset(),不可访问的属性调用isset() isempty()
__unset(),不可访问的属性调用unset,改方法调用。
这四个也被称为四个重载魔术方法。
6、__clone()
复制一个对象的时候调用该方法,其实就是复制一份对象地址,指向新的对象变量,原对象的修改不会影响复制对象,反之也不会影响。
示例代码
<?php class MagicTest{ private $name; function __toString(){ return "对象当做string使用时,__toString()自动调用<br>"; } function __invoke($a, $b){ echo "对象当做方法使用的时候自动调用,$a-$b<br>"; } //固定格式[访问函数名称,参数] function __call($funcName,$argments){ echo "调用函数名称:".$funcName.",参数是".implode("-",$argments)."<br>"; } public static function __callStatic($funcName, $argments){ echo "调用静态函数名称:".$funcName.",参数是".implode("-",$argments)."<br>"; } //固定格式 public function __get($name){ return "不可访问的属性是:$name<br>"; } public function __set($name, $value) { echo "设置不可访问的属性是:$name=$value<br>"; } function __isset($name){ echo 'is isset function '.$name.'<br>'; return false; } function __unset($name){ echo 'is unset function '.$name.'<br>'; } } header("Content-type:text/html;charset=utf-8"); $magic = new MagicTest(); echo $magic; $magic(1,2); $magic->callUndefineFunc(1,2,3,4); $magic::callUndefineStaticFunc(1,2,3); echo $magic->attrName; $magic->arrtname = "magic func"; echo "attr is user isset".isset($magic->attr).'<br>'; echo "attr is user empty".empty($magic->attr).'<br>'; unset($magic->attrName); class CloneClass{ public $name; function __clone(){ $this->name = "inner clone"; } } $c = new CloneClass(); $c->name = "clone"; $c2 = clone $c; echo "before call clone name=".$c2->name."<br>"; $c2->name = "clone2"; echo "clone1 name=".$c->name."<br>"; echo "clone2 name=".$c2->name."<br>";
相关推荐
面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它强调将数据和处理数据的方法封装在对象中,以模拟现实世界中的实体。PHP虽然最初设计为过程化编程语言,但自PHP5起,它开始支持完整...
面向对象编程(Object-Oriented Programming, OOP)是现代软件开发中常用的一种编程范式,旨在通过模拟现实世界中的实体及其相互关系来构建软件。PHP,尽管最初设计时并非纯粹的面向对象语言,但自PHP 5版本起,它...
资源名称:PHP5面向对象编程专题 (chm格式)内容简介: 一个非常小巧的CHM格式电子书,详细讲解了PHP5中面向对象编程的基本概念、构造函数、对象复制,绑定等知识点,一步一步让您不断的了解PHP的对象编程。...
综上所述,PHP专题涵盖了从基础到高级的关键知识点,包括重要函数的选择性解析、面向对象编程的深入理解、异常处理的应用以及静态化和缓存技术,旨在帮助开发者全面掌握PHP的核心技能,以适应不断发展的Web开发需求...
PHP专题从原理到实例简述PHP的重点函数,静态化技术,缓存技术,面向对象编程,以及详细的异常处理。 主题讲解思路清晰,流程化分析,富含表格与图片说明.
在PHP5的专题讲解中,会详细介绍其面向对象编程特性,如类、对象、继承、封装和多态。此外,也会涵盖异常处理,这是错误管理和程序健壮性的重要组成部分。数据库交互是PHP应用中的关键环节,书里会教授如何使用PHP5...
最后,为了帮助大家更好地理解PHP面向对象程序设计的其他相关知识,文中还推荐了一系列与PHP相关的专题教程,包括PHP面向对象程序设计入门教程、PHP基本语法入门教程、PHP运算与运算符用法总结、PHP网络编程技巧总结...
PHP面向对象程序设计中对象的遍历操作主要涉及利用foreach循环语句来遍历对象的实例属性,即那些在对象中直接声明的属性,不包括...最后,结合示例和相关专题的学习,可以进一步加深对PHP面向对象编程的理解和实践。
### PHP学习总结精粹 #### 1. PHP概述与特性 PHP,全称为...通过系统学习PHP的基础知识、面向对象编程、高级特性和最佳实践,可以成为一名合格的PHP开发者,构建出既安全又高效的Web应用程序。
8. **面向对象编程**:涉及类与对象的概念,封装、继承、多态等面向对象特性,以及PHP中的命名空间和接口。 9. **PHP框架**:如Laravel、Symfony、CodeIgniter等,它们提供了一套完整的开发结构,简化了开发流程。 ...
在PHP中,还有许多其他魔术方法,如__construct()用于对象构造,__destruct()用于对象销毁,__call()用于调用不可访问的方法等,它们共同构成了PHP面向对象编程的强大功能。 最后,以上提到的面向对象的特性,要求...
对于想要进一步深入了解PHP面向对象编程、数组操作、基本语法、运算符用法、字符串处理、数据库操作等内容的读者,可以参考本文末尾提到的相关教程和专题,这些都是学习PHP编程的宝贵资源。通过这些资料的系统学习,...
文章最后提到的几个相关专题,如《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》等,为对PHP开发感兴趣的朋友提供了丰富的学习资源,可以帮助大家进一步掌握PHP编程的各种技巧和知识。...
在PHP的面向对象编程中,自动加载机制是一个非常重要的特性,它能够在程序运行时自动加载类文件,大大简化了代码的结构并提高了开发效率。自动加载机制的原理是,当创建一个类的对象时,如果该类的定义尚未被加载,...
开发者需要了解PHP的基础语法、面向对象编程、以及如何使用PHP与数据库(如MySQL)进行交互。 2. **HTML与CSS结合**:前端开发中,HTML负责构建页面结构,而CSS则负责样式和布局。通过合理使用CSS选择器、盒模型、...
在本课程教学之初,老师可以做一个专题讲座,讲解用PHP开发一个完整网站的流程,并提出PHP开发应具备的知识:PHP语句基础、面向对象知识、HTML知识、MySQL数据库知识等。 PHP编程内容的选择: 我们需要选择合适的...
总的来说,这个压缩包为读者提供了一个丰富的学习资源,涵盖了PHP5的高级应用,包括数据库操作、面向对象编程、错误处理、文件I/O等多个方面。通过动手实践这些代码,读者不仅可以深化理论知识,还能提升实际编程...
面向对象编程(OOP)在PHP中得到广泛应用,允许开发者定义类(class),创建对象(object),实现封装(encapsulation)、继承(inheritance)和多态(polymorphism)等特性。PHP5引入了更完善的对象模型,支持私有(private)、...
你可以在这里找到关于变量、控制结构、函数、面向对象编程、错误处理和异常控制等全方位的PHP知识。 2. **PHP函数集.chm** 这个文件专门聚焦于PHP的内置函数,提供了函数的参数、返回值、使用示例和注意事项。通过...
例如,可以参考本站专题,包括《PHP基于pdo操作数据库技巧总结》、《PHP+MongoDB数据库操作技巧大全》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》以及...