@javalaw2010
2015-08-18T09:04:33.000000Z
字数 2138
阅读 1349
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.单例设计模式
<?phpclass 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,{//实现所有接口中的抽象方法}