@javalaw2010
2015-08-18T09:04:33.000000Z
字数 2138
阅读 1299
PHP
web
html
,css
,javascript
等web基础不表,但仍保留数据库等内容;1.四个魔术方法_set()
,_get()
,_isset()
,_unset()
_set()
要求有两个参数,第一个为要设置属性的名称,第二个为要设置属性的值。
_set()
会被自动调用,看上去就像属性没有被封装一样
比如:
$person->name = '张三'; //_set()会被自动调用
_get()
要求一个参数,为需要获取的属性的名称,它也会被自动调用。
_isset()
和unset()
会在外部调用isset()
和unset()
时被自动调用。
注意:为了防止魔术方法在外部被调用,应当使用private
修饰符修饰魔术方法
2.在子类中重写的方法的权限不能低于父类被覆盖的方法的权限
3.final
final
加在类或类中方法前,不能修饰成员属性
使用final
修饰的类为最终版本,不能被继承
使用final
修饰的成员方法,在子类中不能被覆盖
4.static
外部访问方式:
类名::静态成员属性名;
类名::静态成员方法名();内部访问方式:
self
::静态成员属性名;
self
::静态成员方法名();
注意:在静态方法中只能访问静态成员
5.单例设计模式
<?php
class DB{
private static $obj = null;
private function _construct(){ //使用private封装构造函数,无法在外部实例化
//do something
}
static function getInstance(){
if(is_null(self::$obj)){
self::$obj = new self(); //在内部实例化自身
return self::$obj;
}
}
$db = DB::getInstance();
6.const
使用
const
声明的常量名称前不需要$
符号
通过对象名称访问常量是不允许的
7.常用的魔术方法_clone()
,_toString()
,_call()
,_autoload()
_clone()
不需要任何的参数,自动包含$this
和$that
,$this
是副本对象的引用,$that
是原本对象的引用
$p1 = $p2;//这不是克隆,而是多复制出一个对象的引用
$p1 = clone $p2; //自动调用_clone()
_toString()
要求一定要有一个字符串作为返回值,
class TestClass{
private $foo;
function _construct($foo){
this->$foo = $foo;
}
function _toString(){
return this->$foo;
}
$obj = new TestClass('hello');
echo $obj;//自动调用_toString()函数
_call()
当调用对象中不存在的方法时,自动调用_call()
,_call()
需要两个参数,第一个是不存在方法的名称字符串,第二个是调用不存在方法时的参数数组。
_autoload()
是一个全局函数,用来自动加载类,当你尝试使用一个没有组织到的类时,php会寻找该函数,并将类名作为作为参数来调用它;
function _autoload($className){
include(strtolower($className).".class.php");
}
1.对象串行化的场景
对象需要在网络中传输时,将对象串行化成二进制串后在网罗传输
对象需要持久保存时,将对象串行化后写入文件或是数据库中
2.使用serialize()
来串行化一个对象,使用unserialize()
来反串行化
$person_string = serialize($peson); //串行化
$person = unserialize($person_string);//反串行化
3._sleep()
和_wakeup()
在串行化的时候,会自动调用
_sleep()
,_sleep()
不需要任何参数,但他需要返回一个数组,数组中包含需要串行化的属性。
在反串行化的时候,自动调用_wakeup()
,你可以在其中为变量重新赋值。
有抽象方法的类就是抽象类,抽象类和抽象方法都需要用
abstract
修饰
抽象类当中的成员方法和成员属性,都不能用private
修饰
接口是一种特殊的抽象类,接口中声明的所有方法都必须是抽象方法,只能使用
const
关键字声明为常量的成员属性
接口中的成员都必须拥有public
权限的访问属性
接口之间可以使用extends
关键字实现继承
类继承接口时需要使用implements
实现
可以在继承一个类的同时实现多个接口,方式如下:
class 类名 extends 父类名 implements 接口1,接口2,{
//实现所有接口中的抽象方法
}