PHP面向对象的程序设计封装--php高级最详细教程
发布时间:2022-09-26 11:18:34 所属栏目:PHP教程 来源:
导读: class Proson{
//类里面,不能使用函数作为值
//类里面,不能使用变量作为值
//类里面,可以使用常量作为值
var $name = ’小伟‘; //一种赋默认值的方式
va
//类里面,不能使用函数作为值
//类里面,不能使用变量作为值
//类里面,可以使用常量作为值
var $name = ’小伟‘; //一种赋默认值的方式
va
class Proson{ //类里面,不能使用函数作为值 //类里面,不能使用变量作为值 //类里面,可以使用常量作为值 var $name = ’小伟‘; //一种赋默认值的方式 var $sex; var $age; function say(){ echo "我的名字是:{$this->name},我的性别是:{$this->sex},我的年龄是:{$this->age}。 "; } function run(){ } function eat(){ } } 实例化对象语法: 通过类来实例化对象 1. 使用的是new 新建一个对象,加上类名,就是创建那个类的对象 $对象引用=new 类名; $对象名称 = new 类名称(); $对象名称 = new 类名称(构造参数); 2. 只要有一个new 关键字就是创建一个对象,创建一个对象就在内存中分配了一个空间 只有对象才在内存有存储空间 把此类实例化对象 //实例化多个对象$p、$p1、$p2 $p = new Proson; $p1 = new Proson; $p2 = new Proson; $p3 =$p1; //对象成员属性赋值 $p->name = "vilin"; //$p对象赋值 $p->sex = "男神"; //$p对象赋值 $p->age = 19; //$p对象赋值 对象类型在内存中的分配: 对象中成员的访问: //对象访问自身对象的成员属性和成员方法(取值) //后面的成员属性前面不要加 $符号,否则就变成了可变变量。 echo $p->name; //vilin echo $p->sex; // 男神 echo $p->age;//19 $p->say(); //调用成员方法 echo $p1->name; //使用默认值 小伟 echo $p1->sex; //var_dump($p1->sex) 为NULL,因为没有赋值 对象比较: //在用逻辑运算来判断对象的时候,只要所有成员属性全相等php引用面向对象教程php引用面向对象教程,那么用 == 来判断则返回 true //如果用 === 来判断则返回 false // === 在对象的判断上,意思是,逻辑运算符两边是不是同一个对象 if($p1 === $p3){ echo 'Y'; // $p1和$p3是同一个对象 }else{ echo 'N'; } 特殊的对象引用 $this : 特殊对象的引用$this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问。 构造方法和析构方法 构造方法 说明: 构造方法, 构造器 1. 是对象创建完成以后,“第一个” “自动调用”的方法 2. 构造方法的定义, 方法名一个固定的, 在PHP4中 和类名相同的方法就是构造方法 在PHP5中 构造方法选择使用 魔术方法 __construct() 所有类中声明构造方法都使用这个名称 优点: 在改变类名时,构造方法不用改变 作用:就是为成员属性初使化; 格式: 格式: [修饰符] function __construct ( [参数] ) { ... ... } 析构方法 析构方法: 1. 当对象被释放之前最后一个 “自动”调用的方法 使用垃圾回收器(java PHP)而C++手动的释放 作用:关闭一些资源, 作一些清理的工作 __destruct(); 对象释放方法: unset($p) $p = null 页面结束时释放 实例: 魔术方法: 魔术方法: * 在类中写出了某个魔术方法, 这个方法对象的功能 就会添加上 * * 方法名称都固定的(都是系统给我们提供好),没有自己定义的, * * 每一个魔术方法, 都是在不同时刻为了完成某一功能自动调用的方法 * 不同的魔术方法有不同调用 时机 * * 都是以 __开头的方法(两个下划线) * * __construct(); 构造方法 * __destruct(); 析构方法 * * __set(); 封装 * __get(); * __isset(); * __unset(); * * __clone(); * * __call(); * * __sleep(); * * __weakup(); * * __toString() * * ... * * __autoload(); 封装性 封装性:面向对象的三大特性之一 概念:就是把对象中的成员(属性、方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节 封装中用到的三个修饰词:public(公有的)、 protected(受保护的)、private(私有的) 被这个三个词修饰的属性或方法的被访问范围 public protected private 外面 Y N N 子类 Y Y N 自己 Y Y Y 说明:外面指的是父类或者子类的花括号外面统称为外面,子类指的是子类的花括号 内部,自己指的就是父类本身的花括号内。 //protected class A{ protected $name = 'test'; public function ziji(){ return $this->name; } } class B extends A{ public function getname(){ return $this->name; } } $b = new B; echo $b->ziji(); //protected 外面不能访问 子类里面可以访问 自己里面也可以访问 //private class A{ private $name = 'test'; public function ziji(){ return $this->name; } } class B extends A{ public function getname(){ return $this->name; } } $b = new B; echo $b->ziji(); //private 外面访问不到 子类里面也访问不到 自己里面是可以的 //public class A{ public $name = 'test'; public function ziji(){ return $this->name; } } class B extends A{ public function getname(){ return $this->name; } } $b = new B; //echo $b->name; //echo $b->getname(); $a = new A; echo $a->ziji(); //public 外面可以访问 子类里面也可以访问 自己里面也可以 为什么要封装?(封装的作用) 属性封装: 只要一个变量,需要在多个方法中使用,就将这个变量声明成成员属性,可以直接在这个对象中的所有方法中使用 成员属性,就相当于这个对象中的全局变量 成员属性都会在方法中使用,成员属性值的变化其实就是在改变方法的执行行为,也就是改变对象的功能。 成员属性的不正常方法执行的功能也就不正常。 构造方法会正常使用$p = new Person('vilin',19,'男'); 封装的作用: 不需要在对象外部改变或读取属性值 对需要读取或改变的值使用方法加以控制 使用魔术方法__set() __get() 设置或读取值进行操作(使用自定义的方法调用属性太多的时候要声明很多方法,太复杂。) 方法封装作用: 一个类中有100个方法, 封装了95个(为另外的5个服务的方法), 只有5个方法可以使用 供用户调用的功能方法只有5个就够了,封装起来,让用户知道私有的方法,不需要调用。 和封装有关的魔术方法: __set():是直接设置私有成员属性值时,自动调用的方法 __get():是直接获取私有成员属性值时,自动调用的方法 __isset(); 是直接isset查看对象中私有属性是否存时自动调用这个方法 __unset(); 是直接unset删除对象中私有属性时,自动调用的方法 //用到的词 $this class function construct destruct private protected public 实例:关于封装相关的魔术方法 (编辑:应用网_镇江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐