今天在老王的技术手册看到一个问题:
<?php if ($a = 100 && $b = 200) { var_dump($a, $b); }
输出是什么?
这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单.
左手代码右手诗
今天在老王的技术手册看到一个问题:
<?php if ($a = 100 && $b = 200) { var_dump($a, $b); }
输出是什么?
这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单.
今天有人问我, 说他看到有PHPer在说unless语句, 我很是纳闷, 后来才知道, 原来是一个国外的PHP大牛自己Hack了PHP的源码, 加入了一个unless语句.
很有意思, 今天, 我也就在这里为大家演示, 如何为我们自己的PHP加入unless语句..
黑夜路人前段时间, 本着分享/总结的精神, 计划要总结下PHP常用的调试技术, 就一些问题找到了我..
如今第一版的PHP调试技术手册已经发布.
冠以我名, 我甚感惶恐, 只能一并赞下小黑的nice了~
下载地址: http://heiyeluren-doc.googlecode.com/files/PHP-Debug-Manual-public.pdf
PHP中, 传递Callback的方式, 一直很丑陋. 在PHP5.3以前, 我们只有俩种选择:
1. 字符串的函数名 2. 使用create_function的返回值
在PHP5.3以后, 我们多了一个选择, 也就是Closure,
$func = function () { ... }; array_walk($arr, $func);
今天cici网友发来一个问题, 说是在函数调用参数前面使用错误抑制符号(@)的时候, 貌似引用传参就失效了. 他想让我帮他解答为什么.
看下面的例子:
.....
这个问题, 我之前没有遇到过, 所以首先去找找相关资料, 看看有没有现成的答案, Goolge了一番, 发现虽然有人已经向PHP报了类似的Bug:http://bugs.php.net/bug.php?id=47623, 但PHP官方还没有解决, 也没有给出答复.
没办法, 只能自己分析了...
PHP为了避免数字索引和数字字符串索引(注1)的混乱, 引入了zend_symtable_*系列函数, 并应用于数组中.
这样一来, 数字字符串索引也就会被当作数字索引, 然而总是有一些情况, 是PHP的维护者没有想到的...
比如, 类型转换时刻.
现在普遍的Nginx + PHP cgi的做法是在配置文件中, 通过正则匹配(Nginx(PHP/fastcgi)的PATH_INFO问题)设置SCRIPT_FILENAME, 今天小顿发现了一个这种方式的安全漏洞.
比如, 有http://www.laruence.com/fake.jpg, 那么通过构造如下的URL, 就可以看到fake.jpg的二进制内容:
http://www.laruence.com/fake.jpg/foo.php
为什么会这样呢?
在PHP4以前, PHP并不支持面向对象, 到PHP4的时候, PHP引入了一些OOP的关键字, 请注意我用的"关键字", 因为在PHP4中的对象, 不过就是一个数组(属性)加上一个函数数组(方法), 没有访问权限控制, 没有析构函数(当然可以模拟), 等等.
到PHP5以后, 随着Zend Engine 2的发布:
1. 访问权限控制 2. 接口的引入 3. 魔术方法(PHP4中可以通过overload来有限模拟) 4. 接口的应用 5. 内置接口 等等.
PHP5终于可以算是较完美的支持面向对象了.
而这些看似复杂的实现, 在根本上, 还是没有脱离属性数组+方法数组的基本, 接下来我就为大家揭开隐藏在源代码中的秘密.
在读别人代码的时候, 在没有详细文档的时候, 如何快速的看清整个代码的结构(类结构), 就成为了一个现实的问题.
今天我就介绍一种, 自动生成UML图的方法.
在大型的Web项目中, include_path是一个模块化设计的根本中的根本(当然,现在也有很多基于autoload的设计, 这个不影响本文的探讨), 但是正是因为include_path, 经常会让我们遇到一些因为没有找到正确的文件而导致的看似"诡异"的问题.
也就有了如下的疑问:
include_path是怎么起作用的?
如果有多个include_path顺序是怎么样的?
什么情况下include_path不起作用?
Can't find what you're looking for? Try refining your search: