PHP

1、final :final关键字可以加在类或者类中方法之前,但是不能使用final标识成员属性。

    作用: 使用final标识的类,不能被继承。

        在类中使用final标识的成员方法,在子类中不能覆盖。

    总结:final表示为最终的意思,所以使用final关键字的类或者类中的成员方法是不能被更改的。

final 放在类前面
如果某个类在定义时,前面有修饰词final,则该类不能被继承
final 放在属性前面
属性声明时,如果前面有修饰词final关键字,则该属性值不能被更改,即此时该属性为常量
final放在方法前面
如果某个方法在定义时,前面有修饰词final,该方法可以被调用,不能重写

 


类的自动加载


为什么?
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件)。

在 PHP 5 中,不再需要这样了。可以定义一个 __autoload() 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

在 5.3.0 版之前,__autoload 函数抛出的异常不能被 catch 语句块捕获并会导致一个致命错误。从 5.3.0+ 之后,__autoload 函数抛出的异常可以被 catch 语句块捕获,但需要遵循一个条件。如果抛出的是一个自定义异常,那么必须存在相应的自定义异常类。__autoload 函数可以递归的自动加载自定义异常类
自动加载不可用于 PHP 的 CLI 交互模式。

将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。

如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为 spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或spl_autoload_call()。


unserialize()从已存储的表示中创建 PHP 的值,对单一的已序列化的变量进行操作,将其转换回 PHP 的值。
参数str:
序列化后的字符串。

若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。
Note: unserialize_callback_func 指令
如果在解序列化的时候需要实例化一个未定义类,则可以设置回调函数以供调用(以免得到的是不完整的 object “__PHP_Incomplete_Class”)。可通过 php.ini、 ini_set() 或 .htaccess 定义‘unserialize_callback_func’。每次实例化一个未定义类时它都会被调用。若要禁止这个特性,只需置空此设定。
返回值
返回的是转换之后的值,可为 integer 、 float 、 string 、 array 或 object 。
如果传递的字符串不可解序列化,则返回 FALSE ,并产生一个 E_NOTICE 。

2. unserialize_callback_func :
unserialize_callback_func string
如果解串行器发现有未定义类要被实例化,将会调用 unserialize() 回调函数(用该未定义类名作为参数)。如果指定函数不存在,或者此函数没有包含/实现该未定义类,则显示警告。所以仅在确实需要实现这样的回调函数时才设置该选项。
参见 unserialize() 和 Autoloading Objects.

 

 

 

命名空间
概念
“什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。”

为什么?作用?
1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2、为了缓解麻烦1,通常编写各种class时会使用较长的类名或为实现不同功能的class添加名称前缀(或后缀)。

3、不使用魔法函数__autoload的情况下,而每个class又独占一个php文件时,为了调用不同的class,会在使用这些class的另外的php文件的开头位置书写较多的include(或require或require_once)语句。

posted @ 2017-07-31 09:29  前途堪忧yuan  阅读(169)  评论(0编辑  收藏  举报