面向对象的程序设计(英语:Object-oriented programming, 缩写为:OOP),对象是一个由信息及队信息进行处理的描述所组成的整体,是对现实世界的抽象。
三个特性: 1、对象行为;2、对象的形态;3、对象的表示;
面向对象的内容
《1》类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
1、类使用 class 关键字后加上类名定义。
2、类名后的一对大括号({})内可以定义变量和方法。
3、类的变量使用 var 来声明, 变量也可以初始化值。
4、函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
《2》对象 − 是类的实例。
《3》成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。
《4》成员函数 − 定义在类的内部,可用于访问对象的数据。
《5》继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
例子
1 <?php 2 echo "<meta charset='utf-8';>"; 3 class Person{ 4 private $name; 5 private $age; 6 7 public function __construct($name,$age){ 8 $this->name = $name; 9 $this->age = $age; 10 } 11 function setAge($age){ 12 if($age>=0&&$age<=120){ 13 $this->age = $age; 14 }else{ 15 error_log("年龄设置有误!"); 16 } 17 } 18 19 function getAge(){ 20 return $this->age; 21 } 22 public function say(){ 23 echo "我叫{$this->name},我今年{$this->age}岁了"; 24 } 25 26 function __get($name){ 27 switch ($name) { 28 case 'name': 29 return $this ->$name."这是读取时加的文字"; 30 case 'age': 31 return "0".$this ->$name; 32 default: 33 return $this ->$name; 34 } 35 36 } 37 function __set($key,$value){ 38 39 if($key=="name"){ 40 $this->$key = $value."这是设置时加的文字<br>"; 41 }else{ 42 $this->$key = $value; 43 } 44 } 45 function __isset($name){ 46 return isset($this->$name); 47 } 48 49 function __unset($name){ 50 if($name=="age"){ 51 return; 52 } 53 unset($this->$name); 54 } 55 } 56 57 $zhangsan = new Person("zhangsan",14); 58 $zhangsan->setAge(12); 59 echo $zhangsan->getAge()."<br>"; 60 var_dump(isset($zhangsan->name)); 61 unset($zhangsan->age); 62 echo $zhangsan->age; 63 ?>
结果为
《6》父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。
《7》子类 − 一个类继承其他类称为子类,也可称为派生类。
《8》多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
《9》重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
《10》抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
《11》封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
《12》构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
《13》析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作。
命名空间
PHP 命名空间可以解决以下两类问题:
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
类名可以通过三种方式引用: 1非限定名称,或不败韩前缀的类名称;2限定名称,或包含前缀的名称;3完全限定名称,或包含了全局前缀操作符的名称。
规则:1、对完全限定名称的函数,类和常量的调用在编译时解析。
2、所有的非限定名称和限定名称(非完全限定名称)根据当前的导入规则在编译时进行转换。
3、在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。
4、非限定类名根据当前的导入规则在编译时转换(用全名代替短的导入名称)。
5、在命名空间内部(例如AB),对非限定名称的函数调用是在运行时解析的。
6、在命名空间(例如AB)内部对非限定名称或限定名称类(非完全限定名称)的调用是在运行时解析的。