【php】面向对象
2016-07-18 21:21
471 查看
传统的面向过程的编程思想
传统的面向对象的编程思想
类和对象
抽象类
抽象方法
重载
重载在通常的面向对象语言中的含义
重载在php语言中的含义
属性重载
方法重载
PHP内置标准类
2.依次逐步完成这些步骤。如果步骤较大,又可以将该步骤再次细分为子步骤,以此类推。
3.程序从头开始执行一直到结尾并得到所需结果。
流程图:
1将要实现的功能描述为一个“对象/物体”完成的任务——现实中也是如此:功能的实现都是依赖于一个实体的“行动/操作/动作”。
2.完成该最终功能的过程中需要实现其它中间功能(过程),则再去调用其它对象(或也可能是自己本身)来实现该中间功能。
3.整个系统的完成(功能的实现)看作是一个一个对象在发挥其各自的“能力”并在内部进行协调有序的调用过程。
流程图:
万物皆对象;
类
任何对象,都可以人为“规定”为某种类别。
示例:
2.一个类中如果有抽象方法,那么该类必须声明为抽象类。
抽象类是为了方便技术管理而设计。
语法形式:
abstract class 类名{}
2.子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类。
3.子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也需一致。
抽象方法也是为了技术管理而设计:要求下级类自行去实现这个方法的“具体做法”;
语法形式:
abstract function 方法名(形参1,形参2,…); //注意,这里有分号。
示例:
示例:
示例:
//php中的重载,就是来应对上面的出错的情况,使代码不出错,而且还能“优雅的处理”;
属性的本质就是变量,变量的操作方式有四种:取值、赋值、判断、销毁。对应的,属性重载为:
1.取值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:__GET()。
2.赋值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:__SET()。
3.判断:当对一个对象的不存在的属性进行isset()判断的时候,就会自动调用方法:__isset()。
4.销毁:当对一个对象的不存在的属性进行unset()销毁的时候,就会自动调用方法:__unset()。
以上四个方法,被称为“魔术方法”。
__GET($属性名):
在对一个对象的不存在的属性进行取值的时候,会自动调用的方法。我们使用该方法来对这种意外进行特别的处理。
该方法可以带一个形参,表示要对之取值的不存在的属性名。
示例:
__SET(属性名,值)
当对一个对象的不存在的属性进行赋值的时候,就会自动调用这个内部的魔术方法;
它有两个形参,分别代表要对不存在的属性进行赋值的时候的“属性名”和“属性值”;
这个方法,结合__GET方法, 往往可以是我们定义的类,有一种“可方便扩展属性”的特征,使类或对象的属性的操作,变得更为自由和方便。
示例:
__ISSET($属性名)
当对一个对象不存在的属性进行isset()判断的时候,就会自动调用内部方法:__isset();
用法:
示例:
__UNSET($属性名)
当对一个对象中不存在的属性进行unset()销毁操作的时候,就会自动调用内部方法:__unset();
——就算没有这个方法,在类中销毁不存在的变量时也不会有语法错误,只不过使用这个方法更安全。
当对一个对象不存在的静态方法进行调用的时候,会自动调用类中的__callstatic()这个魔术方法;
__call(
这个方法必须要带两个形参:
methodName:表示要调用的不存在的方法名argument: 表示要调用的不存在的方法时,所使用的实参数据。这是一个数组,存储所有的实参。
__callstatic()与__call()一样
b25b
,不过是调用方法和调用静态方法时的区别。
实例:
//调用对象中不存在的方法。
//如果此方法中带一个参数,则返回参数本身。
//如果此方法中带两个参数,则返回参数的平方和。
//如果此方法中带三个参数,则返回参数的立方和。
内置标准类中什么都没有,只是相当于:class stdclass{},其作用用于存储一些临时的简单的数据,也可以用于类型转换时储存数据。
使用示例:
传统的面向对象的编程思想
类和对象
抽象类
抽象方法
重载
重载在通常的面向对象语言中的含义
重载在php语言中的含义
属性重载
方法重载
PHP内置标准类
传统的面向过程的编程思想
1.将要实现的功能描述为一个从开始到结束的连续的“步骤(过程)”。2.依次逐步完成这些步骤。如果步骤较大,又可以将该步骤再次细分为子步骤,以此类推。
3.程序从头开始执行一直到结尾并得到所需结果。
流程图:
传统的面向对象的编程思想
OOP:Object Oriented Program(面向对象编程)1将要实现的功能描述为一个“对象/物体”完成的任务——现实中也是如此:功能的实现都是依赖于一个实体的“行动/操作/动作”。
2.完成该最终功能的过程中需要实现其它中间功能(过程),则再去调用其它对象(或也可能是自己本身)来实现该中间功能。
3.整个系统的完成(功能的实现)看作是一个一个对象在发挥其各自的“能力”并在内部进行协调有序的调用过程。
流程图:
类和对象
对象万物皆对象;
类
任何对象,都可以人为“规定”为某种类别。
示例:
<?php //定义一个Person类 class Person{ var $name; //类的一个特征,其实就是“变量” var $age; var $edu; } //创建一个新的Person类的对象,并“放入”变量$obj1中(其实就是给变量赋值) $obj1 = new Person(); $obj1 -> name ="张真人"; //符号“->”就是表示指代对象的某个特征,这里是给该特征赋值。 $obj1 -> age = 18; //“->”符号就相当于JS中的“.”符号,比如:d1.style.color = "red"; $obj1 -> edu = "大学"; ?>
抽象类
1.一个类可以使用关键字abstract声明为抽象类;抽象类是一个不能实例化的类,只用作其他类的父类。2.一个类中如果有抽象方法,那么该类必须声明为抽象类。
抽象类是为了方便技术管理而设计。
语法形式:
abstract class 类名{}
抽象方法
1.一个方法可以使用关键字abstract声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。2.子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类。
3.子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也需一致。
抽象方法也是为了技术管理而设计:要求下级类自行去实现这个方法的“具体做法”;
语法形式:
abstract function 方法名(形参1,形参2,…); //注意,这里有分号。
示例:
重载
重载在“通常的面向对象语言”中的含义
在通常的面向对象语言中,重载是指在一个类或对象中,有多个名字相同但形参不同的方法的现象。示例:
class C{ function f1(){ // }; function f1($p1){ // }; function f1($p1,$p2){ // }; }
重载在“php语言”中的含义
在php语言中,重载是指当对一个类或对象使用其未定义的属性或方法的时候,会有一些对应的“处理机制”。示例:
class A{ public $p1 =1; } $obj1 = new A(); $obj1 -> $p1 = 2; echo $obj1 -> $p2; //出错,未定义!
//php中的重载,就是来应对上面的出错的情况,使代码不出错,而且还能“优雅的处理”;
属性重载
属性重载就是对一个对象不存在的属性进行使用操作的时候,这个类中预先设定好的处理机制。属性的本质就是变量,变量的操作方式有四种:取值、赋值、判断、销毁。对应的,属性重载为:
1.取值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:__GET()。
2.赋值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:__SET()。
3.判断:当对一个对象的不存在的属性进行isset()判断的时候,就会自动调用方法:__isset()。
4.销毁:当对一个对象的不存在的属性进行unset()销毁的时候,就会自动调用方法:__unset()。
以上四个方法,被称为“魔术方法”。
__GET($属性名):
在对一个对象的不存在的属性进行取值的时候,会自动调用的方法。我们使用该方法来对这种意外进行特别的处理。
该方法可以带一个形参,表示要对之取值的不存在的属性名。
示例:
<?php class A{ public $p1 = 1; function __GET($porp_name){ //可以作下列处理: echo "<br /> 属性{$this->porp_name}不存在!"; return 0; trigger_error("发生错误,属性不存在",E_USER_ERROR); die(); } } $obj1 = new A(); $obj -> $p2; ?> //结果:输出四种不同的处理结果。
__SET(属性名,值)
当对一个对象的不存在的属性进行赋值的时候,就会自动调用这个内部的魔术方法;
它有两个形参,分别代表要对不存在的属性进行赋值的时候的“属性名”和“属性值”;
这个方法,结合__GET方法, 往往可以是我们定义的类,有一种“可方便扩展属性”的特征,使类或对象的属性的操作,变得更为自由和方便。
示例:
<?php class A{ //定义一个属性,这个属性是为了存储若干个不存在的属性数据。 protected $prop_list = array(); //空数组 //这个方法会在A的对象使用一个不存在的属性进行赋值的时候自动调用。 function __set($p,$v){ $this->prop_list[$p] = $v; } function __get($p){ return $this ->prop_list[$p]; } } $obj1 = new A(); $obj1 ->p1 =1; $obj1 ->h1 = 10; $obj ->str1 = "LOVE"; echo "<br />".$obj1 ->p1.$obj1 ->h1.$obj ->str1; ?> //结果:110LOVE
__ISSET($属性名)
当对一个对象不存在的属性进行isset()判断的时候,就会自动调用内部方法:__isset();
用法:
$v1 = isset($对象->不存在的属性);
示例:
<?php class A{ //定义一个属性,这个属性是为了存储若干个不存在的属性数据。 protected $prop_list = array(); //空数组 //这个方法会在A的对象使用一个不存在的属性进行赋值的时候自动调用。 function __set($p,$v){ $this->prop_list[$p] = $v; } function __get($p){ if(isset($this ->prop_list[$p])){ //是代码更强壮,处理溢出的数据 return $this ->prop_list[$p]; }else{ echo "属性不存在"; } } function __isset($prop){ $v1 = isset($this ->prop_list[$prop]); return $v1; } } $obj1 = new A(); $obj1 ->p1 =1; $obj1 ->h1 = 10; $obj ->str1 = "LOVE"; echo "<br />".$obj1 ->p1.$obj1 ->h1.$obj ->str1; echo "<br />".$boj1 -> luanlai; $v1 = isset($obj1->p1); $v2 = isset($obj1->hahaha); echo "<br />"; var_dump($v1); echo "<br />"; var_dump($v2); ?> //结果:110LOVE 属性不存在 bool(true) bool(false)
__UNSET($属性名)
当对一个对象中不存在的属性进行unset()销毁操作的时候,就会自动调用内部方法:__unset();
——就算没有这个方法,在类中销毁不存在的变量时也不会有语法错误,只不过使用这个方法更安全。
方法重载
当对一个对象不存在的方法进行调用的时候,会自动调用类中的__call()这个魔术方法;当对一个对象不存在的静态方法进行调用的时候,会自动调用类中的__callstatic()这个魔术方法;
__call(
$methodName,$argument)
这个方法必须要带两个形参:
methodName:表示要调用的不存在的方法名argument: 表示要调用的不存在的方法时,所使用的实参数据。这是一个数组,存储所有的实参。
__callstatic()与__call()一样
b25b
,不过是调用方法和调用静态方法时的区别。
实例:
//调用对象中不存在的方法。
//如果此方法中带一个参数,则返回参数本身。
//如果此方法中带两个参数,则返回参数的平方和。
//如果此方法中带三个参数,则返回参数的立方和。
<?php class A{ function __call($Func_name,$argument){ if($Func_name === 'f1'){ $len = count($argument); if($len <1 || $len>3){ trigger_error("使用非法的方法!",E_USER_EROOR); }elseif($len == 1){ return $argument; }elseif($len == 2){ return $argument[0]*$argument[0]+$argument[1]*$argument[1]; }elseif($len == 3){ $v1 = $argument[0]; $v2 = $argument[1]; $v3 = $argument[2]; return $v1*$v1*$v1+pow($v2,3)+pow($v3,3); } }else if($Func_name === 'f2'){ }else if($Func_name === 'f3'){ } } } $obj1 = new A(); $v1 =$obj1 -> f1(2); $v2 =$obj1 -> f1(2,3); $v3 =$obj1 -> f1(3,4,5); echo "$v1,$v2,$v3"; ?> //结果:2,,13,405
PHP内置标准类
php语言内部,有很多”现成的类”,内置标准类就是其中之一。内置标准类中什么都没有,只是相当于:class stdclass{},其作用用于存储一些临时的简单的数据,也可以用于类型转换时储存数据。
使用示例:
<?php $obj1 = new stdclass(); $obj1 -> pp = 10; $obj1 -> CC = 100; ?>
相关文章推荐
- [php]创建对象的几种形式
- [php]对象的传值方式
- [php]对象的销毁时机
- [php]继承
- 【php】接口
- php-composer-phar常用命令集
- php最基本的增删改查
- pureftpd的搭建
- win8.1 删除 我的电脑中 蓝牙FTP 图标
- PHP超级全局数组$_FILES
- PHP从入门到接到外包合同,再到放弃
- 简单实现文件上传(php)(小学生日常)
- php学习之路---2(向服务器上传文件)
- 快速查看php程序有没有***
- 2. PHP接入支付宝 即时到帐接口
- 【Matplotlib】图例分开显示
- phpstorm sftp无法连接服务器
- 分享一个php时间段切分为指定段的函数
- PHP实现文件上传功能
- PHP生成zip压缩包