PHP学习笔记05——面向对象
来源:互联网 发布:河南 计价软件 编辑:程序博客网 时间:2024/05/17 08:28
1 <?php 2 3 //1. 类的声明(包括构造方法、析构方法) 4 class PersonA { 5 var $name; //成员属性,用var声明 6 public $age; //当有其他修饰的时候,就不要用var了 7 private $sex; 8 function eat(){ //成员方法 9 echo $this->name." eat now<br/>"; //使用this来引用类的成员属性 10 } 11 private function run(){ //带有权限修饰的成员方法 12 echo "run now<br/>"; 13 } 14 15 function __construct($name, $age = 23) { //构造方法,只能有一个,但可以通过默认参数实现类似于C++中的构造函数重载 16 $this->name = $name; 17 echo $name." 你好<br/>"; 18 } 19 function __destruct() { //析构方法,PHP中已经有垃圾回收机制,析构方法在垃圾回收程序回收对象之前自动调用 20 echo $this->name." 再见<br/>"; 21 } 22 } 23 24 //2. 类的实例化 25 $person = new PersonA("张三"); 26 $person->eat(); 27 28 //3. 类的封装 29 /* private、public修饰符 基础的oop知识,不再赘述 30 * 主要介绍以下几个魔术方法 31 * __set(propertyName, propertyValue) 使用户可以直接给private变量赋值,赋值时会调用该方法 32 * __get(propertyName) 在获得private变量的值时调用 33 * __isset,__unset 对private变量调用iset和unset时使用 34 */ 35 class PersonB{ 36 private $name; 37 private $sex; 38 public function __set($proName, $proValue){ 39 if ($proName == "sex") { 40 if ($proValue != "男" && $proValue != "女") return; 41 } 42 echo "set $proName to $proValue <br/>"; 43 $this->$proName = $proValue; 44 } 45 public function __get($proName) { 46 echo "get $proName value {$this->$proName} <br/> "; 47 return $this->sex; 48 } 49 public function __isset($proName) { 50 return isset($this->$proName); 51 } 52 public function __unset($proName) { 53 unset($this->$proName); 54 } 55 } 56 57 $person = new PersonB(); 58 var_dump(isset($person->sex)); 59 $person->sex = "123"; 60 $person->sex = "男"; 61 var_dump(isset($person->sex)); 62 echo $person->sex."<br/>"; 63 unset($person->sex); 64 var_dump(isset($person->sex)); 65 echo "<br/><br/>"; 66 67 //4. 类的继承 68 /* PHP中采用的是和JAVA一样的单继承,使用extends关键字 69 * protected修饰的成员可以在子类中访问 70 * 支持重写,但子类中的方法开放程度要高于父类 71 * 使用parent::fun()可以调用父类中的方法; 72 */ 73 class PersonAson extends PersonA { 74 function eat() { 75 parent::eat(); 76 echo "son eat now<br/>"; 77 } 78 } 79 $person = new PersonAson("李四"); 80 $person->eat(); 81 unset($person); //也可以显示调用 82 echo "<br/><br/>"; 83 84 //5. 常见的关键字和魔术方法 85 /* 常用关键字 86 * final final修饰的类不能被继承,final修饰的方法不能被重写,注意final不能用来修饰变量 87 * static 标志类属性和类方法,为所有类共有,使用(类名::方法名)来访问,在类自身也可以用(self::方法名)来访问 88 * const 定义类常量,通常变量名都是大写,而且使用时不需要$操作符 89 * instanceof 确定一个对象是类的实例 90 * clone 使用clone拷贝一个对象 91 * 常用魔术方法 92 * __toString() 获取对象字符串表示,输出对象引用时会调用此方法 93 * __call() 调用类中不存在的方法会调用该防范,第一个参数为函数名,第二个参数为函数列表.有独特的作用. 94 * __autoload() 在用一个该文件中没有的类的时候,会自动调用该方法,可以在该方法中include类文件等操作 95 * serialize 对象串行化,以在网络中传输或者保存在文件中. 96 * unserialize 对象反串行化 97 */ 98 $person = new PersonA("王五"); 99 $personclone = clone $person;100 $personclone->eat();101 var_dump($personclone instanceof PersonA);102 unset($person);103 unset($personclone);104 echo "<br/>";105 106 class PersonC {107 private $name;108 private $age;109 public function __construct($name, $age) {110 $this->name = $name;111 $this->age = $age;112 }113 public function __toString() {114 return "name: ".$this->name." age: ".$this->age."<br/>";115 }116 public function __call($method, $args) { //连贯操作,这里来给变量赋值,在SQL中可能会常用117 if ($method == "name")118 $this->name = $args[0];119 else if ($method == "age")120 $this->age = $args[0]; 121 122 return $this;123 }124 }125 $person = new PersonC("zhangsan", 15);126 echo $person; //这时候其实会调用toString方法127 echo $person->name("lisi")->age(20); //巧妙使用__call方法128 129 $person_string = serialize($person);130 echo $person_string."<br/>";131 132 $person = unserialize($person_string);133 echo $person;134 echo "<br/>";135 136 //6. 抽象类与接口137 /* abstract class 修饰抽象类,不能被实例化,里面的成员不能是private的.里面可以有抽象方法,用abstract修饰,没有任何实现.138 * 子类必须实现所有父类的抽象方法才能实例化,否则也是抽象类.139 * interface 所有方法都是抽象方法,只能有const常量,所有成员都必须是public的,子类使用implements实现接口.140 * 接口可以实现多个141 * 写法和JAVA基本一致,不再赘述.142 */143 144 //7. 简单多态的应用,一个简单的USB接口程序145 interface USB {146 function run();147 }148 class UKey implements USB {149 public function run() {150 echo "Ukey run<br/>"; 151 }152 }153 class UMouse implements USB {154 public function run() {155 echo "UMouse run<br/>";156 }157 } 158 class Computer {159 function useUSB($usb) {160 $usb->run();161 }162 }163 $com = new Computer();164 $com->useUSB(new UKey());165 $com->useUSB(new UMouse());166 ?>
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- PHP学习笔记05——面向对象
- PHP学习笔记——面向对象编程
- PHP学习笔记--面向对象
- php面向对象学习笔记
- php面向对象学习笔记
- PHP面向对象学习笔记
- PHP——面向对象(笔记)
- php面向对象笔记(—)
- PHP面向对象学习的笔记
- PHP 面向对象学习笔记总结
- PHP面向对象学习的笔记
- PHP学习笔记(四)面向对象
- php面向对象编程--学习笔记
- php面向对象编程示例学习笔记
- php类面向对象学习笔记
- C++学习笔记——面向对象
- 学习笔记1—面向对象
- PHP面向对象笔记
- 程序员分类,你是哪一类?——读《编程匠艺》
- 微信开发平台功能思维导图
- 常用的webservice接口
- 大数,高精度计算---大数加法
- 面向对象的三个基本特征 和 五种设计原则
- PHP学习笔记05——面向对象
- 毕向东_JavaScript视频_HTML
- 音视频文件码率与大小计算
- oracle所有产品文档下载地址
- 不用线程做Android软件欢迎界面,透明效果,完成后自动跳转
- 如何让android app适应不同分辨率
- hdu 2095 find your present (2)(位异或)
- windows平台用NDK编译jrtplib
- 帧内预测——fillReferenceSamples