php基本函数用法,PHP函数常用用法小结

魔术函数

魔术函数是PHP中内置的语言特性,当程序执行到某种情况时,如果定义了这些魔术函数(php手册中称之为“Overloading”),则PHP会调用他们,同时也会传入相应的参数,可以认为是PHP执行过程中的钩子函数。常见的魔术函数有__construct, __destruct , __call, __get, __set, __isset, __unset __sleep, __wakeup, __toString, __clone以及__autoload。它们 可以用来自动加载包含文件,实现延迟执行(类似于.Net中的属性访问器)、垃圾回收、对象clone等操作,举个__autoload的例子,其他魔术函数参见 Magic Method。

__autoload($class_name):用来自动加载包含文件,省得include,require,对性能有一定影响,但一般情况下可忽略。

下面是一个简单的例子

function __autoload($class_name)

{

require_once $class_name . '.class.php';

}

把它放入common.php等全局包含文件中,当新建一个对象时,比如$obj=new Class_A,如果php无法找到Class_A,则会把"Class_A"作为参数$class_name,执行__autoload函数。这样就可以达到自动包含头文件的目的了。

另外附赠几个常量和函数:

__FILE__ :魔术常量,获取当前源代码文件的路径(含文件名)

__CLASS__:魔术常量,获取当前类的类名(区分大小写的)。

array get_included_files ( void ):内置函数,返回通过include(), include_once(), require()或require_once()包含的文件列表,但不包括通过php.ini配置文件中所设置的auto_prepend_file项。另外get_required_files()只是get_included_files ( void )的别名。

string dirname ( string path ):返回路径中的目录部分。

匿名函数

在PHP5.3以前使用匿名函数,可以通过create_function()来创建匿名函数,

$func=create_function('$a,$b', '

if ($a == $b)

{

return 0;

}

return ($a< $b) ? -1 : 1;

');

在PHP5.3中,可以直接使用lamda表达式

$func=function($a,$b)

{

if ($a == $b)

{

return 0;

}

return ($a< $b) ? -1 : 1;

}

然后可以作为参数传入其他函数,如:usort($arr,$func);也可以直接调用,$func(3,4);

在PHP5.3中使用闭包

function foo($arg1)

{

$var=3;

$inner=function($innerArg) use($arg1,$var)

{

return $innerArg+$arg1/$var;

};

echo $inner(5);

}

闭包被当成一个内置类,但是没有javascript那么灵活,这个类不能有属性。$inner->a=5;是非法的。

嵌套函数

嵌套函数可以在父函数体里面定义函数,如:

function outer()

{

$out_var=1;

function inner()

{

var_dump($out_var);//输出NULL,无法访问到$out_var,声明global也不行,$out_var不是全局变量

echo "call inner\n";

}

//echo "call outer\n";

inner();//如果不调用inner(),则在访问outer()时也不会被调用

}

outer();

inner();//虽然,函数是全局的,必须先调用outer(),否则inner()调用会报错(函数未定义)

条件函数

$debug=false;

if($debug===true)

{

function foo()

{

echo "foo";

}

}

foo();

相当于条件编译了,从这里我们可以猜测到,为什么上文中outer()调用之前,inner()是无法调用的。因为inner在outer()调用之前还未被“编译”(只是猜测,未深入研究)。

函数动态调用

函数名可以是变量名。

function foo()

{

echo "call foo";

}

$func='foo';

$func();

此方式比较危险,建议使用白名单方式将可用的函数名写在配置文件中,或者函数名都有统一前缀,比如$func="act_".$funcName;。另外在调用之前可用function_exists($funcName)来检查函数是否存在。

通过内置函数调用函数,call_user_func(callback function,[, mixed parameter [, mixed ...]]),对于不确定的函数名,确定的参数可以使用此函数调用,如果参数也不确定可以通过call_user_func_array( callback function, array param_arr )

另外,可以通过get_defined_functions()来获取所有已定义的函数(注意是所有,包括内置函数)

调用类的方法则传入一个数组作为参数,此数组第一个元素是实例或类名,第二个元素是方法名:

class myclass

{

public $age=21;

function echo_age()

{

echo $this->age;

}

static function s_echo_age()

{

echo 22;

}

function i_echo_age()

{

echo 23;

}

}

$c=new myclass;

$classname = "myclass";

//调用实例方法,如果call_user_func(array($classname , 'echo_age'));则会报错,$this未指向任何实例

call_user_func(array($c, 'echo_age'));

echo "\n";

//调用实例方法,如果没有引用$this变量,则不会有问题

call_user_func(array($classname, 'i_echo_age'));

echo "\n";

//调用静态方法,传入类名或实例均可

call_user_func(array($classname, 's_echo_age'));

echo "\n";

call_user_func(array($c, 's_echo_age'));

获取函数参数

通过此方式可以实现非常灵活的重载,但容易使逻辑变得负责,适度使用。

func_get_arg ( int arg_num )获取第arg_num个参数(从0开始计数)

func_num_args()获取参数总个数

func_get_args()获取所有参数。

用三行代码实现Gof中的一个设计模式:

function call_it($func)

{

$args=func_get_args();

array_shift($args);//去掉第一个参数,那是函数名

call_user_func_array($func,$args);

}

function add($a,$b)

{

echo $a+$b;

}

function sqr($a)

{

echo $a*$a;

}

call_it('add',1,2);

echo "\n";

call_it('sqr',2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 curl获取远程文件内容 GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP XML转数组函数 PHP 缓存函数 PHP 设置COOKIE,并且加密COOKIE函数 PHP不缓存数据头 PHP伪造IP PHP全角半角转换函数 PHP农历函数 PHP分页函数 PHP判断字符串是否UTF8格式 php判断爬虫函数 PHP判断远程文件是否存在 PHP图片处理类:缩略,裁剪,圆角,倾斜 PHP多功能图片处理类 PHP多重判断删除文件函数 PHP实现英文标题的正确大写 PHP常用图片处理类 PHP常用测试函数 PHP得到当周每天日期 PHP文件下载类 PHP无限分类[左右值]算法 PHP显示日期、周几、农历初几、什么节日函数 PHP格式化数据,防止注入函数 PHP模拟登陆 PHP生成唯一标识符函数 PHP生成曲线图函数 PHP生成条形码 PHP统计字符串里单词出现次数 PHP缩略图类,可生成BMP格式 PHP自定义大小验证码函数 PHP获取.NET发出的WEBSERVICE数据 PHP获取FLV文件播放时间函数 PHP获取一年内所有周的开始和结束日期 php获取指定日期所在周的开始和结束日期 PHP读取文件前几个字节 判断文件类型函数 PHP连接ACCESS PHP采集程序中常用函数 PHP随机产生指定长度中文字符串 SMTP类 url地址参数加密 一些常用验证函数 下拉-单选框选择 创建多级目录 删除数组中相同元素,只保留一个 判断路径是绝对目录还是相对目录 利用PHP搜索指定目录下指定的文件 加密解密 去掉指定的html标签 发送 trackback 数据包 图像处理类 图片验证码生成 字符集转换类 对要输入的字符串进行转换 对要输出的字符串进行反转换 对输入JS进行转换 寻找两个函数所有不同的元素 寻找两数组所有不同元素 得到文件类型 截取字符串中两个特定唯一字符之间的内容 截取指定长度字符串 折线图 按照比例改变图片大小(非生成缩略图) 收藏主页 数据验证类 数组转换成XML格式 日期计算 是否为电子邮件格式 柱形统计图 检查是否为一个合法的时间格式 检测URL地址有效性 检测文件是否图片 检测是否可以以网页形式显示 检测是否序列化后的字符串 模仿JAVASCRIPT的ESCAPE和UNESCAPE函数的功能 用curl函数读取远程文件 用file_getcontents提交数据 用php生成扭曲,有角度的验证图片(支持中文) 用正则加亮关键字 程序运行过程中直接输出 缩略图带版权信息函数 缩略图类 获得用户操作系统的换行符 获得用户的真实IP地址 计算字符串的长度(汉字按照两个字符计算) 设为主页 转换附件大小单位 转静态函数 遍历文件夹文件 采集网络数据 随机字符串 验证码 验证码类 验证输入的邮件地址是否合法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值