php学习(9)类

PHP中类的方法不区分大小写。由于PHP是弱类型,所以不能定义重名的方法。


如果把一个已经创建对象复制给一个变量,这个变量保留的是对这个对象的引用,而不是生成一个一样的新对象。

  1. $b = new a();  
  2. $c = $b

protected只能被当前类和子类访问。为类添加方法时如果不交关键字,默认是public。


构造函数: __construct() 对象创建时进行初始化。
析构函数: __destruct() 对象被释放时执行的函数。当页面脚本执行完毕时对象自动释放,
或者手动使用unset()函数进行释放。如果其他变量保留了对象的引用,则必须在
对象的引用均删除后才会释放对象。

__construct()也可以用类名来代替。但一般都使用__construct()构造函数来进行初始化,因为这样语义更清晰。并且当修改类名时不必修改构造函数。


extends关键字:实现继承关系。

class TVsony extends TV{}


new关键字:通过类创建新对象,类的实例化。

$tv1 = new TVsony();


final关键字:规定类不能被继承或类的方法不能被修改或重写。


const关键字:定义类常量,该常量只能在类中访问,类似于define。必须用self关键字访问。

self关键字:用于访问类的属性。保存当前类的引用。

  1. const s = 0.9;  
  2.     function __construct(){  
  3.         echo "s:".self::s;  
  4.     } 

static:声明为类的静态属性或方法。可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。
class Person{

static function sayClass(){}

}

Person::sayClass();


$this:用于访问对象的属性和方法。


:: 表示访问类的属性和方法。self::保存当前类的应用。parent::保存父类的引用,如parent::__construct。


单例模式的例子啊!这个值得我好好记一下。

  1. class e{  
  2.     public $uname;  
  3.     static $obj = NULL;  
  4.     private function __construct(){   //只能被内部函数构造  
  5.           
  6.     }  
  7.     static function getObj(){        //只能通过访问类本身来调用  
  8.         if(is_null(self::$obj)){     //单例模式,只能生成1个公用对象  
  9.             self::$obj = new e();  
  10.         }  
  11.         return self::$obj;  
  12.     }  
  13. }  
  14. $d = e::getObj();   //访问类本身来创建一个实例  
  15. $d->uname = 100;  
  16. echo $d->uname."<br/>";  
  17. $e = e::getObj();   //由于类的实例static $obj != null,因此返回$obj的引用  
  18. $e->uname = 200;      
  19. echo $e->uname."<br/>";     
  20. echo $d->uname."<br/>"


PHP 对象克隆 clone 关键字与__clone() 方法

关于clone的讲解还是比较多的,我参照别人总结的内容理解了一下,附上链接吧。

http://blog.csdn.net/clh604/article/details/11367329

有的时候我们需要在一个项目里面使用两个或多个一样的对象,如果使用 new 关键字重新创建对象,再赋值上相同的属性,这样做比较烦琐而且也容易出错。PHP 提供了对象克隆功能,可以根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。

使用关键字 clone 来克隆对象。语法:
$object2 = clone $object;

如果想在克隆后改变原对象的内容,需要在类中添加一个特殊的 __clone() 方法来重写原本的属性和方法。__clone() 方法只会在对象被克隆的时候自动调用。

我们使用clone来复制对象,这种复制叫做“浅复制”:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。也就是说,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

相对于“浅复制”,当然也有一个“深复制”:被复制的对象的所有的变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。也就是说,深复制把要复制的对象所引用的对象都复制了一遍。深复制需要决定深入到多少层,这是一个不容易确定的问题,此外可能会出现循环引用的问题,这些都必须小心处理。


__toString()是在直接打印对象时执行的方法,我们可以用该方法打印类的一些相关信息,该方法必须有返回值。


get_class_methods(__CLASS__) 获得当前类的方法。


get_object_vars($this) 获得当前对象的属性。


__call() 在调用方法不存在的方法时执行。


__isset() 当外部调用isset()函数时执行。


__unset() 在外部调用unset()函数时执行。使用方法类似__isset()。


serialize()函数:序列化除resource外的任何类型。对象序列化时只保存属性,不保存方法。实现跨文件访问。


unserialize()函数:反序列化,即将序列化字符串还原为序列化之前的状态。


__wakeup() 在对象反序列化时自动执行。通过此函数可使对象在序列化与反序列化之后可以自动执行一些重要的方法。例如连接数据库。


__sleep() 可以指定要序列化的内容,以数组方式返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值