Posts tagged with php内核


好久没有更新了,发篇占位文:如果某个函数的默认参数是个常量,那么怎么样获取这个参数的常量名称?见代码: <?php function new_blog($title = DEFAULT_TITLE) { // blahblah } 在上面的代码中,怎么样获取函数new_blog函数的参数$title所对应的默认值常量名: DEFAULT_TITLE。这个问题和以前我曾写过的一篇 关于如何获取变量名称的博文相似。 这个问题,在PHP5.4.6之前基本上没有解决方法了,因为函数定义是编译时的信息,在PHP运行时是获取不到的。 当然这里说的无法实现是指的使用官方PHP版本时没法搞定。 在PHP中类似的需求,一般都可以使用PHP的反射扩展。 PHP的反射(Reflection) 反射是PHP5中提供的用于获取或操作PHP内部信息的标准扩展,可能写应用代码的用户使用的较少一些…

什么是NOP NOP 是一个特殊的opcode,表示空操作,在很多地方存在,汇编中的NOP含义也一样, 机器指令中的空操作通常用来将内存地址进行对齐,以提高CPU访问内存的效率, GCC等编译器也会将特定的语句进行优化而产生空操作。 PHP中的空操作opcode NOP: ZEND_NOP PHP基于Zend虚拟机,其他基于虚拟机的语言中大都会有类似NOP的指令, PHP文档有对此的简单说明: <?php /* * no operation * opcode number: 0 */ function A(){}; ?> /* VLD 的输出结果 */ line # op fetch ext return operands 6…

昨天在网上看到几道有意思的PHP题, 下面这道题让我想起了对应的Javascript版本. ` 这段代码运行结果是什么呢? 别急着执行这段代码,先想想你的结果.然后再对比一下吧. 我们看先看看global的定义 http://www.php.net/manual/en/language.variables.scope.php 这里也没有太为规范的解释.只是说可以通过global关键字来访问全局变量. 这里还涉及到一个类型转换的问题. 大家都知道PHP脚本是编译为opcode逐语句执行的. 那么现在要一句语句解释就很容易了. ` 这里可能比较困惑的的是现在变量$a到底是局部变量还是全局变量了.因为global在定义局部变量之后.所以$a变为了全局变量,而在最后输出结果的时候$a并没有值.所以最后在相乘的时候是 NULL * 100; 也就是0了;可能会有人有疑问, 后面只是把…

上一篇文章里提到是用PHP扩展实现获取变量的变量名的方法. 今天发现有一个PHP实现的版本 . 实现方法来自:http://mach13.com/how-to-get-a-variable-name-as-a-string-in-php 刚开始以为这个方法好使, 仔细想想其实也是有问题的. 这个解决方法是用的PHP里的get_defined_vars()方法,该方法返回当前作用域内的所有变量信息.也是和$GLOBALS一样,以变量名 => 值的方式返回. 他的代码很简单: ` $v) $aDefinedVars_0[$k] = $v; $iVarSave = $iVar; $iVar =!$iVar; // 将当前变量的值取反 $aDiffKeys = array_keys (array_diff_assoc…