千家信息网

php容易弄不明白的知识点有哪些

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,php容易弄不明白的知识点有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、类中self和static的区别以及什么是后期静态绑定
千家信息网最后更新 2025年11月09日php容易弄不明白的知识点有哪些

php容易弄不明白的知识点有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、类中self和static的区别以及什么是后期静态绑定(late static buildings)

self是用来调用本代码所在类中的内容,而static是用来调用实例中的类的内容。

测试代码如下:

';    }    public static function test() {        static::who(); // 后期静态绑定从这里开始        self::who();    }}class B extends A {    public static function who() {        echo __CLASS__."\n";    }}B::test();

二、ini_set用于设置当前程序中的php配置,替换php.ini中内容,仅用于当前程序。

三、const 和 define 的根本区别在于,const 在编译时定义常量,而 define 在运行时定义常量

const FOO = 'BAR';define('FOO', 'BAR');// butif (...) {    const FOO = 'BAR';    // 无效}if (...) {    define('FOO', 'BAR'); // 有效}

四、isset($a['test'])最好用array_key_exists('test',$a),因为当$a['test']=null时,isset($a['test'])会返回false

五、try{} catch(Exception $e){} finally{},无论有无出错finally中的内容都会执行,即使有return,最终也是执行finally中的return。

六、判断 PHP 数组是否是关联数组的方法

function has_string_keys(array $array) {  return count(array_filter(array_keys($array), 'is_string')) > 0;}

七、===运算符返回值,当两边是对象的时候,即使一个对象是另一个对象的clone,也不相等,必须两个对象指向的地址相同才相等,但如果是一般变量,只要变量类型和值相等即可。

$a = new stdClass();$a->foo = "bar";$b = clone $a;var_dump($a === $b);//false$c = 10;$d = 10;var_dump($c === $d);//true

八、==号要慎重使用,如果一边是字符串一边是数字时就容易产生问题

$a = 0;echo ('pa' == $a) ? 'true' : 'false';//true$b = 1;echo ('1cedd' == $b) ? 'true' : 'false';//true

九、array_map、array_walk、array_filter,三个对数组内容过滤或者重新计算非常好的函数。

/*array_map示例,返回用自定义函数处理完的数组*/$func = function($value) {    return $value * 2;};print_r(array_map($func, range(1, 5)));$func2 = function($a,$b) {    return $a * $b;};//如果有多个数组传入,则每个数组中取同样key的值作为参数print_r(array_map($func2, range(1, 5),range(10, 50)));/*array_walk示例,对传入数组中的每一个值使用自定义函数处理,函数的前两个参数是value,key*还有一个array_walk_recursive递归对数组中的每个变量使用自定义函数*/$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");function test_alter(&$item1, $key, $prefix){    $item1 = "$prefix: $item1";//此处改变了原数组中的值}function test_print($item2, $key){    echo "$key. $item2
\n";}echo "Before ...:\n";array_walk($fruits, 'test_print');array_walk($fruits, 'test_alter', 'fruit');echo "... and after:\n";array_walk($fruits, 'test_print');/*array_filter,返回符合自定义数组条件的变量数组,如果不传入函数变量,则返回数组中值不为0,'0',false,null值的变量*/function odd($var){ // 返回输入整数是否为奇数(单数) return $var & 1;}function even($var){ // 返回输入整数是否为偶数 return !($var & 1);}$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];$array2 = [6, 7, 8, 9, 10, 11, 12];echo "Odd :\n";print_r(array_filter($array1, "odd"));echo "Even:\n";print_r(array_filter($array2, "even"));//不应该在回调函数中改变数组(如:添加、删除或销毁"unset"当前数组和里面的元素),否则此函数的行为将不可预测。

十、php是没有函数重载功能的,php的函数是基于其名称而不包括参数,但是可以使用func_num_args() func_get_arg() func_num_args()这三个函数来实现类似函数重载的功能。

function foo(){    $numargs = func_num_args();    echo "Number of arguments: $numargs
\n"; if ($numargs >= 2) { echo "Second argument is: " . func_get_arg(1) . "
\n"; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo "Argument $i is: " . $arg_list[$i] . "
\n"; }}foo(1, 2, 3);

看完上述内容,你们掌握php容易弄不明白的知识点有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数组 函数 内容 变量 对象 参数 方法 问题 知识 知识点 三个 两个 代码 功能 常量 整数 更多 示例 程序 静态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库功能优化方案 济南安卓软件开发公司哪家强 股票软件开发编程 北京国家网络安全标识标牌设计 保定学院计算机网络技术专业 更新修改数据库的sql语句 方舟如何查看服务器是否炸服 电子信息工程跟计算机网络技术 数据库原理贾铁军pdf 只复制粘贴未隐藏的数据库 安全第一网络安全工作总结 普通服务器小文件处理办法 java怎么和数据库接起来 宽带网络技术改进方案 LOL德玛西亚区服务器波动 后台向数据库添加数据的语句 融势互联网科技怎样 北京电信网络技术有限公司 1212服务器挂了的补偿 杭州吾动网络技术有... 一局大逃杀服务器需要花多少钱 Wind万得数据库 个人登录 网络安全系统验收报告 网络技术有限公司 翻译 微创上海网络技术 关于软件开发的图标 我的世界服务器高级设备 北京网络安全行业发展 java软件开发技术方向 西宁网络技术哪家强
0