1、php函数method_exists() 与is_callable()的区别在哪
在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有 method_exists()和is_callable(),相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true。如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数。数组必须包含对象或类名,以将其作为它的第一个元素,要检查的方法名则作为第二个元素。如果该方法在类中存在,函数返回true。
if ( is_callable( array( $obj, $method ) ) ) { /*要操作的代码段*/ }
is_callable()可以加收另外一个参数:一个布尔值,如果将该参数设置为true,函数仅仅检查给定的方法或函数名称的语法是否正确,而不检查其是否真正存在。method_exists()函数的参数为一个对象(或类名)和一个方法名,如果给定方法在对象的类中存在,则返回true
if ( method_exists( $obj, $method ) ) { /*要操作的代码段*/ }
php函数method_exists()与is_callable()的区别在于在php5中,一个方法存在并不意味着它就可以被调用。对于 private,protected和public类型的方法,method_exits()会返回true,但是is_callable()会检查存在其是否可以访问,如果是private,protected类型的,它会返回false。
2、array_filter()数组操作函数
array array_filter ( array $array
[, callable $callback
[, int $flag
= 0 ]] )
其中flag:有两个可选值:ARRAY_FILTER_USE_KEY和
ARRAY_FILTER_USE_BOTH
ARRAY_FILTER_USE_KEY:把数组的值传递过去,回调函数只接受key的值
ARRAY_FILTER_USE_BOTH:把键和值一起传过去,回调函数接收两个参数,下边有这个例子,可以参考下
遍历数组中传递给回调函数的每个值。如果回调函数返回true,则从数组中返回当前值返回结果数组。数组的键值被保存。
另外如果不传递callback的值,则过滤到所有为false的值,包含false,null,以及""
<?php function odd($var){ // 返回奇数 return($var & 1); //按位 & 就是各个位数相同的不变否则都算成0 :比如:1是00000001 2是00000010 按位与就变成0了,0是false 就不会返回了,这个只是个例子,函数可以是其他的 } function even($var){ // 偶数 return(!($var & 1)); } $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); $array2 = array(6, 7, 8, 9, 10, 11, 12); echo "Odd : "; print_r(array_filter($array1, "odd")); echo "Even: "; print_r(array_filter($array2, "even")); ?>
结果为下边的输出
Odd : Array ( [a] => 1 [c] => 3 [e] => 5 ) Even: Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 )
比如:没有callback的值
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => ''
);
print_r(array_filter($entry));
结果为:
Array ( [0] => foo [2] => -1 )
flag的使用
$arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
print_r(array_filter($arr, function($v, $k) {
return $k == 'b' || $v == 4;
}, ARRAY_FILTER_USE_BOTH)); 返回键为b和值为4的结果。。。
结果为:
Array ( [0] => foo [2] => -1 )
3、filter PHP自带的过滤函数
PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。、例如邮箱、IP地址、数字是否在什么之间等等
函数 | 描述 |
---|---|
filter_has_var() | 检查是否存在指定输入类型的变量。 |
filter_id() | 返回指定过滤器的 ID 号。 |
filter_input() | 从脚本外部获取输入,并进行过滤。 |
filter_input_array() | 从脚本外部获取多项输入,并进行过滤。 |
filter_list() | 返回包含所有得到支持的过滤器的一个数组。 |
filter_var_array() | 获取多项变量,并进行过滤。 |
filter_var() | 获取一个变量,并进行过滤。 |
下边举一个filter_arr的例子,其他的自行查找手册
<?php $email = "someone@example.com"; if(filter_var($email, FILTER_VALIDATE_EMAIL)){ echo "是邮箱"; }else{ echo "不是邮箱"; } ?>
结果为:是邮箱
4、array_intersect()、array_intersect_assoc()、array_diff()
array_intersect()函数返回一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。
array_intersect_assoc()与array_intersect()基本相同,只不过他在比较中还考虑了数组的键。因此,只有在第一个数组中出现,且在所有其他输入数组中也出现的键/值对才返回到结果数组中。
array_diff()返回出现在第一个数组中但其他输入数组中没有的值。这个功能与array_intersect()相反。
5、str_word_count()
这个函数是用来计算在字符串中找到词的数量。
6、checkdate()
本函数可以用来检查日期是否有效,例如年为0至32767年、月为1至12月、日则随着月份及闰年变化。
7、array_column()
从记录集中取出 last_name 列,用相应的 "id" 列作为键值:
<?php // 表示由数据库返回的可能记录集的数组 $a = array( array( 'id' => 5698, 'first_name' => 'Bill', 'last_name' => 'Gates', ), array( 'id' => 4767, 'first_name' => 'Steve', 'last_name' => 'Jobs', ) array( 'id' => 3809, 'first_name' => 'Mark', 'last_name' => 'Zuckerberg', ) ); $last_names = array_column($a, 'last_name', 'id'); print_r($last_names); ?> 输出 Array ( [5698] => Gates [4767] => Jobs [3809] => Zuckerberg ) 其中id可以省略