太原PHP培训
达内太原php培训中心

0351-5608878

热门课程

PHP高级工程师的武功秘籍(二)

  • 时间:2016-11-16
  • 发布:极客头条
  • 来源:极客头条

PHP高级工程师的武功秘籍(二)

HEREDOC介绍

Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实现了界面与代码的准分离,phpwind模板就是一个典型的例子。

1.<<

2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.,来拼接,如下:

$v=2;

$a= <<

"abc"$v

"123"

EOF;

echo $a; //结果连同双引号一起输出:"abc"2 "123"

3.heredoc常用在输出包含大量HTML语法d文档的时候。比如:函数outputhtml()要输出HTML的主页。可以有两种写法。很明显第二种写法比较简单和易于阅读。

function outputhtml(){

echo "";

echo "";

echo "主页内容";

echo ";

}

function outputhtml()

{

echo <<

主页内容

EOT;

}

outputhtml();

heredoc中会自动替换其中的$变量,将命令和输入放在一块,方便

写出一些php魔幻方法;

php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。

PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload

1__get__set

这两个方法是为在类和他们的父类中没有声明的属性而设计的

__get( $property ) 当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名

__set( $property, $value ) 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值

这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)

2__isset__unset

__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法

__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法

__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)

3__call

__call( $method, $arg_array ) 当调用一个未定义的方法是调用此方法

这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()法,如果本类中不存在__call()方法就去找父类中的__call()方法

4__autoload

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

如果要定义一个全局的自动加载类,则必须用spl_autoload_register()方法将处理类注册到PHP标准库:

view plaincopy to clipboardprint?

class Loader

{

static function autoload_class($class_name)

{

//寻找正确的$class_name类,并引入,没有则抛出异常

}

}

/**

* 设置对象的自动载入

* spl_autoload_register — Register given function as __autoload() implementation

*/

spl_autoload_register(array('Loader', 'autoload_class'));

$a = new Test();//Test没用require就实例化,实现自动加载,很多框架就用这种方法自动加载类

?>

注意: __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误,所以应该在函数本身做捕获。

5__construct__destruct

__construct 构造方法,当一个对象创建时调用此方法,相对于PHP4使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称

__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法。默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源,析构函数允许你在使用一个对象之后执行任意代码来清除内存。当PHP决定你的脚本不再与对象相关时,析构函数将被调用。

在一个函数的命名空间内,这会发生在函数return的时候。

对于全局变量,这发生于脚本结束的时候。

如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.

6__clone

PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法,如果在对象复制需要执行某些初始化操作,可以在__clone方法实现。

7__toString

__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时。

如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in

此方法必须返回一个字符串。

PHP 5.2.0之前,__toString方法只有结合使用echo() print() 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但 不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。

8__sleep__wakeup

__sleep 串行化的时候用

__wakeup 反串行化的时候调用

serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。

使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。

相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。

使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

9__set_state

当调用var_export()时,这个静态 方法会被调用(PHP 5.1.0起有效)

本方法的唯一参数是一个数组,其中包含按array(’property’ => value, …)格式排列的类属性。

10__invoke

当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

PHP5.3.0以上版本有效

11__callStatic

它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用,

PHP5.3.0以上版本有效

PHP 确实加强了对 __callStatic() 方法的定义;它必须是公共的,并且必须被声明为静态的。同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此

一些编译php时的configure 参数

./configure

–prefix=/usr/local/php php 安装目录

–with-apxs2=/usr/local/apache/bin/apxs

–with-config-file-path=/usr/local/php/etc 指定php.ini位置

–with-mysql=/usr/local/mysql mysql安装目录,对mysql的支持

–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli文件目录,优化支持

–enable-safe-mode 打开安全模式

–enable-ftp 打开ftp的支持

–enable-zip 打开对zip的支持

–with-bz2 打开对bz2文件的支持

–with-jpeg-dir 打开对jpeg图片的支持

–with-png-dir 打开对png图片的支持

–with-freetype-dir 打开对freetype字体库的支持

–without-iconv 关闭iconv函数,种字符集间的转换

–with-libxml-dir 打开libxml2库的支持

–with-xmlrpc 打开xml-rpcc语言

–with-zlib-dir 打开zlib库的支持

–with-gd 打开gd库的支持

–enable-gd-native-ttf 支持TrueType字符串函数库

–with-curl 打开curl浏览工具的支持

–with-curlwrappers 运用curl工具打开url

–with-ttf 打开freetype1.*的支持,可以不加了

–with-xsl 打开XSLT 文件支持,扩展了libxml2 ,需要libxslt软件

–with-gettext 打开gnu gettext 支持,编码库用到

–with-pear 打开pear命令的支持,php扩展用的

–enable-calendar 打开日历扩展功能

–enable-mbstring 多字节,字符串的支持

–enable-bcmath 打开图片大小调整,用到zabbix监控的时候用到了这个模块

–enable-sockets 打开 sockets 支持

–enable-exif 图片的元数据支持

–enable-magic-quotes 魔术引用的支持

–disable-rpath 关闭额外的运行库文件

–disable-debug 关闭调试模式

–with-mime-magic=/usr/share/file/magic.mime 魔术头文件位置

cgi方式安装才用的参数

–enable-fpm 打上php-fpm 补丁后才有这个参数,cgi方式安装的启动程序

–enable-fastcgi 支持fastcgi方式启动php

–enable-force-cgi-redirect 同上 ,帮助里没有解释

–with-ncurses 支持ncurses 屏幕绘制以及基于文本终端的图形互动功能的动态库

–enable-pcntl freeTDS需要用到的,可能是链接mssql 才用到

mhashmcrypt算法的扩展

–with-mcrypt 算法

–with-mhash 算法

–with-gmp

–enable-inline-optimization

–with-openssl openssl的支持,加密传输时用到的

–enable-dbase

–with-pcre-dir=/usr/local/bin/pcre-config perl的正则库案安装位置

–disable-dmalloc

–with-gdbm dbagdbm支持

–enable-sigchild

–enable-sysvsem

–enable-sysvshm

–enable-zend-multibyte 支持zend的多字节

–enable-mbregex

–enable-wddx

–enable-shmop

–enable-soap

PHP配置选项完整列表

数据库选项

–with-dbplus

包括 dbplus 的支持。

–with-adabas[=DIR]

包括 Adabas D 的支持。DIR Adabas 的基本安装目录,默认为 /usr/local

–with-sapdb[=DIR]

包括 SAP DB 的支持。DIR SAP DB 的基本安装目录,默认为 /usr/local

–with-solid[=DIR]

包括 Solid 的支持。DIR Solid 的基本安装目录,默认为 /usr/local/solid

–with-ibm-db2[=DIR]

包括 IBM DB2 的支持。DIR DB2 的基本安装目录,默认为 /home/db2inst1/sqllib

–with-empress[=DIR]

包括 Empress 的支持。DIR Empress 的基本安装目录,默认为 $EMPRESSPATH。自 PHP4 起,本选项仅支持 Empress 8.60 及以上版本。

–with-empress-bcs[=DIR]

包括 Empress Local Access 的支持。DIR Empress 的基本安装目录,默认为 $EMPRESSPATH。自 PHP4 起,本选项仅支持 Empress 8.60 及以上版本。

–with-birdstep[=DIR]

包括 Birdstep 的支持。DIR Birdstep 的基本安装目录,默认为 /usr/local/birdstep

–with-custom-odbc[=DIR]

括用户自定义 ODBC 的支持。DIR ODBC 的基本安装目录,默认为 /usr/local。要确认定义了 CUSTOM_ODBC_LIBS 并且在 include 目录中有某个 odbc.h。例如,对于 QNX 下的 Sybase SQL Anywhere 5.5.00,在运行 configure 脚本之前应该先定义以下环境变量: CPPFLAGS=”-DODBC_QNX -DSQLANY_BUG” LDFLAGS=-lunix CUSTOM_ODBC_LIBS=”-ldblib -lodbc”.

–with-iodbc[=DIR]

包括 iODBC 的支持。DIR iODBC 的基本安装目录,默认为 /usr/local

–with-esoob[=DIR]

包括 Easysoft OOB 的支持。DIR OOB 的基本安装目录,默认为 /usr/local/easysoft/oob/client

–with-unixODBC[=DIR]

包括 unixODBC 的支持。DIR unixODBC 的基本安装目录,默认为 /usr/local

–with-openlink[=DIR]

包括 OpenLink ODBC 的支持。DIR OpenLink 的基本安装目录,默认为 /usr/local。这和 iODBC 一样。

–with-dbmaker[=DIR]

包括 DBMaker 的支持。DIR DBMaker 的基本安装目录,默认为最新版 DBMaker 安装的目录(例如 /home/dbmaker/3.6)

–disable-unified-odbc

取消对 unified ODBC 的支持。仅适用于激活了 iODBCAdabasSolidVelocis 或用户自定义 ODBC 界面。仅能用于 PHP 3!

好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择太原达内培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

上一篇:PHP高级工程师的武功秘籍(一)
下一篇:PHP高级工程师的武功秘籍(三)

PHP中十六个魔术方法详解(三)

JavaScript 与 Java、PHP 的比较

太原php培训资源站

太原PHP编程开发并发编程槽与坑

选择城市和中心
贵州省

广西省

海南省