Press "Enter" to skip to content

深入理解PHP之数组(遍历顺序)

经常会有人问我, PHP的数组, 如果用foreach来访问, 遍历的顺序是固定的么? 以什么顺序遍历呢?
比如:

<?php
$arr[2] = 'huixinchen';
$arr[1]  = 2007;
$arr[0]  = 2008;
foreach ($arr as $key => $val) {
//结果是什么?
}

要完全了解清楚这个问题, 我想首先应该要大家了解PHP数组的内部实现结构………

Filed in PHP应用, PHP源码分析
with 38 Comments

保证PHP扩展的依赖关系

cyj网友提到, 如果俩个PHP扩展模块之间有互相依赖关系, 那么该如何保证正确的加载顺序呢?

也就是说, 如何保证模块的依赖关系?

关于这个问题, 可以从如下俩点入手展开:

1. 扩展的加载顺序是和它出现在配置文件中的先后顺序相关的, 也就是说, 如果在配置文件中的顺序如下,

extension=mysql.so
extension=pdo.so
    

那么, mysql扩展就会比pdo扩展先载入.

2. 那么如果顺序出错, 我们又要怎么保证正确的加载, 或者告诉Zend此时出错了呢?……

Filed in PHP源码分析
with 21 Comments

PHP中的Hash算法

Hash Table是PHP的核心,这话一点都不过分.

PHP的数组,关联数组,对象属性,函数表,符号表,等等都是用HashTable来做为容器的.

PHP的HashTable采用的拉链法来解决冲突, 这个自不用多说, 我今天主要关注的就是PHP的Hash算法, 和这个算法本身透露出来的一些思想.

Filed in PHP源码分析, 随笔
with 28 Comments

PHP Session的一个警告

警告全文如下:

	PHP Warning:  Unknown: Your script possibly relies on a session side-effect
which existed until PHP 4.2.3. Please be advised that the session extension does
not consider global variables as a source of data, unless register_globals is enabled.
You can disable this functionality and this warning by setting session.bug_compat_42
or session.bug_compat_warn to off, respectively. in Unknown on

网上对这个问题的解决有很多办法, 但是都是不知所以然的解决之道. 本文从seesion出发, 分析了这个问题的成因, 继而让大家知道所以然…

Filed in PHP应用, PHP源码分析
with 14 Comments

用C/C++扩展你的PHP

PHP取得成功的一个主要原因之一是她拥有大量的可用扩展。web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到。PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩展。

本文就用C/C++在Unix下编写PHP扩展所需的各种知识,做一个详尽的说明….

Filed in PHP源码分析, 转载
with 63 Comments

数组非数字键名引号的必要性

我看到过很多人操作数组的时候, 对于数组中的非数字键名不使用引号,

  $array[key] = $value;

我可以理解有些人可能会觉得这样的代码很”整洁”, 并且也能正常执行.
更甚至,如果他很”幸运的”php配置的好:

error_reporting = ~E_NOTICE

他也许永远都沉浸在自己的”整洁”风格中, 看不到任何的NOTICE提示, 也不会意识到, 他这么做, 能损失多少的性能~

来, 我们一起来看看:

Filed in PHP应用, PHP源码分析
with 26 Comments

一个低概率的PHP Core dump

PHP是个脚本语言, 错误定位容易, 编写起来速度较快..但是, 如果遇到了PHP自身的一些问题,那就会让人很恼火.
最近遇到一个很低概率的Core dump(大概是2年才出现一次), 经过和同事一起仔细分析,跟踪,终于找出了原因, 拿出来与大家分享.

Filed in PHP应用, PHP源码分析
with 8 Comments

深入理解PHP原理之foreach

foreach是PHP中很常用的一个用作数组循环的控制语句。
因为它的方便和易用,自然也就在后端隐藏着很复杂的具体实现方式:(对用户透明)
今天,我们就来一起分析分析,foreach是如何实现数组(对象)的遍历的。
本节内容涉及到较多编译原理(lex and yacc)的知识,所以如果您觉得看不太懂,可以先找相关的资料看看。

Filed in PHP应用, PHP源码分析
with 19 Comments