《php面向对象精要总结_2》由会员分享,可在线阅读,更多相关《php面向对象精要总结_2(13页珍藏版)》请在金锄头文库上搜索。
1、我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解PHP面向对象精要总结1 使用extends实现继承以及重载、魔术方法的含义class B extends A声明的时候B里可以没有A里的方法调用的时候:$b=new B();$b-A里的方法();$b-A里的属性=1;$b-B里的方法();$b-B里的方法();如果$a=new A();可以$a-A里的方法();$a-A里的属性=1;不可以$a-B里的方法();$a-B里的方法();重载:B继承A ,B里实现和A同名的方法属性。PHP中的重载与其它绝大多
2、数面向对象语言不同。传统的重载是用于提供多个同名的 类方法,但各方法的参数类型和个数不同。魔术方法:PHP把所有以_(两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 _为前缀。2 继承用private和protected访问修饰符可见性属性方法private不可以被继承属性方法protected类外部不可见,可以被继承属性方法public 所定义的类成员可以在任何地方被访问3 php中双冒号:的应用php类代码中常看到:的操作符,这个是作用域限定操作符,是用一个双冒号:表示,它用来置顶类中不同作用域的级别。左边是作用域右边是访问作用域的成员。在php中定义的作用域有se
3、lf和parent两种(在php6中提供了static作用域)。范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于子类覆盖父类中的成员和方法。代码如下:class MyClass const CONST_VALUE = A constant value;echo MyClass:CONST_VALUE;class OtherClass extends MyClasspublic static $my_static = static var;public static function doubleColon
4、() echo parent:CONST_VALUE . n;echo self:$my_static . n;OtherClass:doubleColon();/子类覆盖父类class MyClassprotected function myFunc() echo MyClass:myFunc()n;class OtherClass extends MyClass/ 覆盖父类中的方法public function myFunc()/ 但仍然可以调用已被覆盖的方法parent:myFunc();echo OtherClass:myFunc()n;$class = new OtherClass(
5、);$class-myFunc();4 php中this和self以及parent的作用this:就是指向当前对象实例的指针,不指向任何其他对象或类。self:表示当前类的作用域,与this不同的是它不表示类的某个特定实例,在类之外的代码中不能使用self,而且它不能识别自己在继承中层次的位置。也就是说,当在扩展类中使用self时,它调用的不是父类的方法,而是扩展类的重载的方法。self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。代码如下:private static $firstCount = 0;private $lastCount;/构
6、造函数function _construct()$this-lastCount = +self:$firstCount; /使用self来调用静态变量,使用self调用必须使用:(域运算符号)parent:表示当前类父类的作用域,其余的跟self特性一样。parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。代码如下:/继承类的构造函数function _construct( $personSex, $personAge )parent:_construct( test ); /使用parent调用了父类的构造函数$this-personSex = $personSex;
7、$this-personAge = $personAge;5 构造函数与析构函数具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。function _construct() 如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent:_construct()。PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C+。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。function _destruct() 6 final 关键字PHP 5 新增了一个 final
8、 关键字。如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。7 继承和构造函数父类 子类 结果有构造函数 无构造函数 父构造有构造函数 有构造函数 子构造8 接口可以通过interface来定义一个接口,就像定义一个标准的类一样。注意:1)但其中定义所有的方法都是空的;2)接口中定义的所有方法都必须是public,这是接口的特性;3)实现多个接口时,接口中的方法不能有重名;4)接口也可以继承,通过使用extends操作符;5)接口中也可以定义常量。接口常量和类常量的使用完全相同。 它们都是定值,不能被子类或子接口修改。/ 声明一个iTemp
9、late接口interface iTemplatepublic function setVariable($name, $var);public function getHtml($template);/ 实现接口/ 下面的写法是正确的class Template implements iTemplateprivate $vars = array();public function setVariable($name, $var)$this-vars$name = $var;public function getHtml($template)foreach($this-vars as $nam
10、e = $value) $template = str_replace( . $name . , $value, $template);return $template;9 属性类的变量成员叫做“属性”,属性声明是由关键字public或者protected或者private开头,然后跟一个变量来组成。 属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。在PHP5 中,预定义了两个函数“_get()”和“_set()”来获取和赋值其属性,以及检查属性的“_isset()”和删除属性的方法“_unset()”
11、。简单的说一个是取值,一个是赋值。,“_set()”和“_get()”这两个方法,这两个方法不是默认存在的,而是我们手工添加到类里面去的,像构造方法(_construct()一样, 类里面添加了才会存在,可以按下面的方式来添加这两个方法,当然也可以按个人的风格来添加:/_get()方法用来获取私有属性代码如下:class Person/下面是人的成员属性private $name; /人的名字private $sex; /人的性别private $age; /人的年龄/_get()方法用来获取私有属性private function _get($property_name)if(isset($
12、this-$property_name)return($this-$property_name);else return(NULL);/_set()方法用来设置私有属性private function _set($property_name, $value)$this-$property_name = $value;/_isset()方法private function _isset($nm)echo isset()函数测定私有成员时,自动调用;return isset($this-$nm);/_unset()方法private function _unset($nm)echo 当在类外部使用
13、unset()函数来删除私有成员时自动调用的;unset($this-$nm);$p1=new Person();$p1-name=this is a person name;/在使用isset()函数测定私有成员时,自动调用_isset()方法帮我们完成,返回结果为trueecho var_dump(isset($p1-name).;echo $p1-name.;/在使用unset()函数删除私有成员时,自动调用_unset()方法帮我们完成,删除name私有属性unset($p1-name);/已经被删除了, 所这行不会有输出echo $p1-name;?代码如下:class Person/下面是人的成员属性private $name;/人的名字private $sex;/人的性别private $age;/人的年龄/_get()方法用来获取私有属性private function _get($property_name)if(isset($this-$property_name)return($this-$p