标签:源文件 成员变量 count() data- person 错误提示 user 传输 eth
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
final关键字只能用来定义类和定义方法。
使用final关键字标记的类不能被继承
final class Person{ ....... } class Student extends Person{ ....... }
会出现错误提示。Fatal error :Class Student may not inherit from final class(Person)
使用final关键字标记的方法不能被子类覆盖
class Person{ final function Say(){ ...... } } class Student extends Person{ function Say(){ ...... } }
会出现下面错误:
Fatal Error:Cannot Override final method Person::say()
使用static关键字可以将类中的成员标识为静态的,既可 以用来标识成员属性,也可以用来标识成员方法。普通成员作为对象属性存在,以Person类为例,如果在Person中有一个"$conuntry = ‘china‘"的成员属性,任何一个Person类的对象都会拥有自己的一份$country属性,对象之间不会干扰。而static成员是作为整个类的属性存在,如果将$country属性使用static关键字标识,则不管通过Person类创建多少个对象(甚至可以是没有对象),这个static成员总是唯一存在的,在多个对象之间共享的。因为使用static标识 的成员属性是属于类的,所以与对象实例和其他的类无关。类的静态属性非常类似于函数的全局变量。类中的静态成员是不需要对象而使用类名来直接访问的,格式如下所示:
类名::静态成员属性名;
类名::静态成员方法名();
在类中声明的成员方法中,也可以使用关键字"self"来访问其他静态成员。因为静态成员是属于类的,而不属于任何对象,所以你不能用$this来引用它,而在PHP中给我们提供 的self关键字,就是在类的成员用来代表本类的关键字。格式如下 所示;
self::静态成员属性名; //在类的成员方法中使用这种方式访问本类中的静态成员属性
self::静态成员方法名(); //在类的成员方法中使用这种方式访问本类中的静态成员方法
如果在类的外部访问类中的静态成员,可以使用对象引用和使用类名访问,但通常选择用类名来访问。
如果在类内部的成员方法中访问其他的静态成员,通常使用self的形式去访问,最好不要直接使用类名称。
在下面的例子中声明一个Myclass类,为了让类中的count属性可以在每个对象中共享,将其声明为static成员,用来统计通过Myclass类一共创建了多少对象。代码如下所示:
<?php class Myclass{ static $count; function __contruct(){ self::$count++;//在类的内部通常使用self形式访问 } static function getcount(){ } static function gecount() return self::$count;//在类的内部,通常使用self的形式去访问 } } Myclass::$count=0; $myc1 = new Myclass(); $myc2 = new Myclass(); $myc3 = new Myclass(); echo Myclass::getCount();//在类的外部,通常选择用类名来访问。 echo $myc3->getCount();
上例的Myclass类中,在构造方法内部和成员方法getCount()的内部,都使用self访问本类中使用static标识为静态的属性count,并在类的外部使用类名访问类中的静态属性。可以看到同一个类中的静态成员在每个对象中共享,每创建一个对象静态属性count就自增1.用来统计实例化对象的次数。
另外在使用静态方法时需要注意,在静态方法中只能访问静态成员。因为非静态的成员必须通过对象的引用才能访问,通常是使用$this完成的。而静态的方法在对象不存在的情况下也可以直接使用类名来访问,没有对象就没$this引用,没有了$this引用就不能访问类中的非静态成员,但是可以使用类名或self在非静态方法中访问静态成员。
3.1.单态设计模式含义:
单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在。作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
3.2.单台模式的三个关键点:
① 需要一个保存类的唯一实例的静态成员变量;
②构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义;
③必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用 。
<?php class DB { private static $obj = null; //声明一个私有的,静态的成员属性$obj private function__construct() { //私有构造方法,只能在类的内部实例化对象 //在该方法中完成数据局的连接等操作
echo "连接数据库成功<br>"; } public static function getInstance() { // 通过此静态方法才能获取本类的对象,该方法为静态方法,用类名调用 if(is_null(self::$obj)) //如果本类中的$obj为空,说明还没有被实例化过 self::$obj = new self(); //实例化本类对象 return self::$obj; //返回本类的对象 } public function query($sql) { //执行SQL语句完成对数据库的操作 echo $sql; } } $db = DB::getInstance();//类名调用 //只能使用静态方法getInstance()去获取DB类的对象,获取后执行下一句完成对数据库的操作 $db -> query("select *from user"); //访问对象中的成员
PHP5的另一个新成员是instdnceof关键字。使用这个关键字可以确定一个对象是类的实例、类的子类,还是实现了某个特定接口,并进行相应的操作。在某些情况下,我们希望确定某个类是否特定的类型,或者是否实现了特定的接口。instanceof操作符非常适合完成这个任务。instanceof操作符检查三件事情:实例是否某个特定的类型,实例是否从某个特定的类型继承,实例或者他的任何祖先类是否实现了特定的接口。例如,假设希望了解名为manager的对象是否为类Employee的实例:
标签:源文件 成员变量 count() data- person 错误提示 user 传输 eth
原文地址:http://www.cnblogs.com/yang01/p/7290798.html