PHP学生笔记:PHP中的面向对象编程

来源:互联网 发布:伴随矩阵的性质 编辑:程序博客网 时间:2024/05/22 13:53

参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html


1、类的成员变量、成员函数,默认修饰符是public;
2、类的成员函数访问自身的成员函数、成员变量用 $this->name; $this->say();
3、类的成员函数访问父类的成员函数用 parent::__construct($name, $sex, $age);
4、类的构造函数是__construct(),析构函数__destruct()
5、final class Math{ } 表示Math类不可被继承,class Car{ final function stop(){ }} 表示Car的stop()方法不可被子类覆盖。 
6、PHP的成员函数不能被重载(C++中通过“参数的个数“或“参数的类型“不同来实现重载),因为PHP没有名子空间的概念,在同一个页面和被包含的页面中不能定义相同名称的方法, 也不能定义和PHP给我提供的方法的方法重名
7、访问类Foo的static变量xx,类外用Foo::$xx,类里用self::$XX,
8、在PHP中定义常量使用的是“define()”这个函数,但是在类里面定义常量使用的是“const”这个关键字,访问类Foo的常量const xx,类外用Foo::xx,类里用self::XX,注意定义的时候不要public,使用的时候没有$
9、抽象方法、抽象类用abstract来修饰,抽象中可以含有非抽象方法和成员变量,但只要含有一个抽象方法,该类就是抽象类,抽象类不能被直接实例化;
10、接口用interface修饰,接口是一种特殊的抽象类,其所有方法都必须是抽象方法,另外接口里面不能声明变量(但可声明常量constant),而且接口里面所有的成员都是public权限的,一个类只能extends一个父类,还可以implemtns多个接口;
11、serialize()和unserialize()用来实现php的序列化和反序列化,
序列化之前,php会自动调用魔术方法__sleep(),__sleep()函数不接受任何参数, 但返回一个数组,其中包含需要串行化的属性。末被包含的属性将在串行化时被忽略,如果没有__sleep()方法,PHP将保存所有属性。
反序列化之前,php会自动调用__wakeup()。
12、在类里面声明的以“__”开头的方法有特殊含义,__toString(), __get(),__set(),__isset(),__unset(),__construct(),__destruc殊情况下自动调用。
(1)echo一个对象时自动调用 __toString();
(2)读写private属性时自动调用__get(),__set();
(3)isset(),unset()private属性时自动调用__isset(),__unset();
(4)克隆一个对象时调用 __clone()方法,__clone()方法自动包含$this和$that两个参数,$this指向复本,而$that指向原本;
(5)调用一个对象的方法,当这个方法不存在时程序会出错,然后程序退出不再继续执行。那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在,但程序还可以继续执行,这个时候我们就要使用在调用不存在的方法时自动调用的方法“__call()”。
__call()有2个参数,第一个参数为这个不存在的方法的方法名,第二个参数则是把这个方法的多个参数以数组的形式传进来。
13、__autoload() 是专门为 类的不存在 而设计的!!!很多框架利用这个函数,实现 类文件的自动加载 !!!
function __autoload($classname)
{
require_once $classname . '.php';
}



<?phpheader("Content-type: text/html; charset=utf-8"); //定义一个"人"类做为父类class Person{//下面是人的成员属性var $name; //人的名子var $sex; //人的性别var $age; //人的年龄//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值function __construct($name, $sex, $age) {$this->name = $name;$this->sex = $sex;$this->age = $age;}//这个人可以说话的方法, 说出自己的属性function say() {echo "我的名字叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age."<br>";}function __destruct(){echo "Person【".$this->name."】被析构<br>";}}class Student extends Person{//学生的最大学号static $No = 0;const slogan = "好好学习,天天向上!";var $myNo;var $school; //学生所在学校的属性function __construct($name, $sex, $age, $school) {//使用父类中的方法为原有的属性赋值parent::__construct($name, $sex, $age);$this->school = $school;$this->myNo = ++self::$No;}//这个学生学习的方法function study() {echo "我的名子叫:" . $this->name . " 我正在" . $this->school . " 学习<br>";}//这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法function say() {parent::say();echo "我在" . $this->school . "上学,我的学号是" . $this->myNo . "<br>";}function __destruct(){echo "Student【".$this->name."】被析构<br>";}}$person = new Person("小明", "女", 15);$person->say();echo "<br>";$stu1 = new Student("张三", "男", 20, "实验小学");$stu1->say();echo "<br>";$stu2 = new Student("李四", "女", 18, "XX小学");$stu2->study();echo "<br>";echo "当前学生的最大学号:".Student::$No;echo "<br>";echo "学习的口号是:".Student::slogan;echo "<br>";?>

输出结果:

我的名字叫:小明 性别:女 我的年龄是:15我的名字叫:张三 性别:男 我的年龄是:20我在实验小学上学,我的学号是1我的名子叫:李四 我正在XX小学 学习当前学生的最大学号:2学习的口号是:好好学习,天天向上!Student【李四】被析构Student【张三】被析构Person【小明】被析构



0 0
原创粉丝点击