PHP学习之八:扩展函数库之基本类型与变量的扩展

1 类/对象

__autoload(string  $name)   用于自动加载类
bool class_alias($old,$new)     将类名取别名
bool class_exists($name,$autoload=false)   检查类是否定义
array  get_class_methods($name)   返回类的所有方法列表
array  get_class_vars($name)  返回类的所有属性列表
array  get_object_vars()   返回由对象属性组成的关联数组

string  get_class($obj)   返回对象的类名
string  get_parent_class($obj)  返回对象或类的父类名

get_declared_classes  get_declared_interfaces get_decleared_traits  返回脚本中已经定义的类、接口、特性

bool  is_a($obj,$class)   检查对象是否为类的实例
bool  is_subclass_of($obj,$name)   检查对象是否为类的子类

method_exists($name,$cname)    检查类是否定义了方法
property_exists($name,$cname)   检查类是否定义了属性


2 变量处理

debug_zval_dump()    dump一个变量信息,包含了引用计数

doubleval()  intval()  strval   转换为浮点型/整形/字符型
get_resource_type() 返回资源类型
settype/gettype() 设置及 获取变量类型

is_array   is_bool  is_callable  is_double  is_float  is_int   is_long  is_null is_numberic  is_object  is_resource  is_string

var_dump/var_export/print_r  打印变量,三者输出格式略有不同


3  函数处理

mixed  call_user_func_array(callable $func, array $params)   回调func并传参数
array   func_get_args(void)          返回函数的所有参数
int        func_num_args(void)       返回函数的参数个数
mixed  func_get_arg(int $num)   返回函数的第num个参数
bool    function_exists($name)    检查函数是否已定义
register_shutdown_function($callback [,$param...])  注册脚本结束时执行函数


<?php
function foobar($arg, $arg2) {
    echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
    function bar($arg, $arg2) {
        echo __METHOD__, " got $arg and $arg2\n";
    }
}


// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));

// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?> 


4 反射

反射提供了对PHP类、对象的反向工程能力,可以获取类、对象、函数、成员方法、成员属性的各种信息,先看下反射子的类层次。

反射的类层次

反射子作为基类提供了export的静态方法。反射子可被Reflection类的export($reflector)静态方法导出详细信息。其中ReflectionClass类用来获取PHP类的信息,ReflectionObject用来获取PHP对象的信息。RefectionMethod用于获取成员方法的信息,而ReflectionFunction用于获取函数的信息。ReflectionProperty用于获取类的成员属性的信息。ReflectionParameter用于获取方法及函数的参数的信息。ReflectionExtension用于获取PHP扩展的信息。这些函数拥有的构造函数可以直接生成各种反射子,各种反射子之间也可以通过成员函数导出。例如Method对象可以通过Class的getMethod方法获得,而parmeter可以通过函数及方法的getParameter方法获得。径向的函数也可以获得其所声明的类名等。 

具体类的成员方法的作用不在这里说明,通过名称要以比较好了解其作用。反射的作用很多,反射可以用来反向工程没有文档的PHP类或扩展,获得相关的信息及注释等信息。另一种用处是通过反射提供查找类作用,获取实例特定接口的所有插件。

这里有一篇讲解利用PHP反射来加载插件的框架。http://dengbaoleng.iteye.com/blog/1504589

5 过滤器

首先介绍一下过滤器的类型Validate与Sanitize,前者用于验证,后者用于纠正

FILTER_VALIDATE_BOOLEAN  检查bool型    

FILTER_VALIDATE_EMAIL          FILTER_SANITIZE_EMAIL

FILTER_VALIDATE_FLOAT         FILTER_SANITIZE_NUMBER_FLOAT

FILTER_VALIDATE_INT               FILTER_SANITIZE_NUMBER_INT

FILTER_VALIDATE_IP

FILTER_VALIDATE_URL             FILTER_SANITIZE_URL

FILTER_VALIDATE_REGEXP


mixed  filter_var(mixed $var , int $filter_type, mixed $opt)   从$var中按照指定的类型与选项进行过滤,返回过滤后的结果。

filter_input($type, $var, int $filter,$opt)  

bool  filter_has_var($type, $var)  检查特定类型变量是否存在   

<?php
$a = 'joe@example.org';
$b = 'bogus - at - example dot org';
$c = '(bogus@example.org)';

$sanitized_a = filter_var($a, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_a, FILTER_VALIDATE_EMAIL)) {
    echo "This (a) sanitized email address is considered valid.\n";
}

$sanitized_b = filter_var($b, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_b, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.";
} else {
    echo "This (b) sanitized email address is considered invalid.\n";
}

$sanitized_c = filter_var($c, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_c, FILTER_VALIDATE_EMAIL)) {
    echo "This (c) sanitized email address is considered valid.\n";
    echo "Before: $c\n";
    echo "After:  $sanitized_c\n";    
}
?> 


6 Classkit

本扩展定义的函数允许在运行时动态操作PHP类。

classkit_import( $filename)

classkit_method_add()

classkit_method_copy()

classkit_method_redefine()

classkit_method_remove()

classkit_method_rename()





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值