PHP踩坑:对象的引用

在php5 的对象编程经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。下面通过一些例子来说明。

php的引用是别名,就是两个不同的变量名字指向相同的内容。在php5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。 当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。
继续阅读“PHP踩坑:对象的引用”

PHP数组求和

做东西的时候遇到数组求和的问题,发现这函数还是很好用的,记录下:
[php collapse=”false”]
<?php
$a=array(0=>"5",1=>"15",2=>"25");
echo array_sum($a);
?>

<?php
$a=array(0=>5,1=>15,2=>25);
echo array_sum($a);
?>
//输出:45

<?php
$a=array(0=>5,1=>15.5,2=>25);
echo array_sum($a);
?>
//输出:45.5

<?php
$a=array(0=>5,1=>"15s",2=>25);
echo array_sum($a);
?>
//输出:45

<?php
$a=array(0=>5,1=>"s15s",2=>25);
echo array_sum($a);
?>
//输出:30
[/php]

php截取数组

php截取数组的方法是使用 array_slice() 函数。

array_slice() 函数的用法如下:

array_slice(array,offset,length,preserve)

参数 描述
array 必需。规定输入的数组。
offset 必需。数值。规定取出元素的开始位置。
如果是正数,则从前往后开始取,如果是负值,从后向前取 offset 绝对值。
length 可选。数值。规定被返回数组的长度。如果是负数,则从后向前,选取该值绝对值数目的元素。如果未设置该值,则返回所有元素。
preserve 可选。可能的值:true – 保留键 false – 默认 – 重置键

例子
[php collapse=”false”]
<?php
$a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
print_r(array_slice($a,1,2));
?>

//输出:
Array ( [0] => Cat [1] => Horse )
[/php]

Ubuntu下搭建LNAMP环境时PHP扩展的安装

在Ubuntu中,我们能够很方便的使用apt-get来安装LNAMP环境。以下是踩过的一些坑,做个记录。
1.当搭建Linux+Apache+PHP+MySql环境时,PHP安装使用:
[shell collapse=”false”]
sudo apt-get install php5
[/shell]
当搭建Linux+Nginx+PHP+MySql环境的时候,PHP安装使用:
[shell collapse=”false”]
sudo apt-get install php5-fpm
[/shell]
PHP-FPM是一个PHPFastCGI管理器,是只用于PHP的。nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。

新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。
2.安装PHP扩展:
[shell collapse=”false”]
sudo apt-cache search php5
apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
[/shell]
这样可以安装这些扩展,话说之前看别人的教程踩的坑蛮多的。

解决Parse error: syntax error, unexpected end of file in *

帮朋友看一个帝国CMS的网站源码,客户要求添加几个功能,本地部署各种出错,一看源码写的时间,都是2008以前的…想想也是有点醉。
部署的时候一直提示错误:Parse error: syntax error, unexpected end of file in *
找了很久,查了下资料才发现问题很简单。
原来源码中很多地方都使用了PHP的短标签。
<? //php code ?>
虽然这是PHP的一种标签写法,但是官方并不推荐这种写法,帝国这种神奇的框架…就不说了。
看来还是修改php.ini配置,打开短标签吧。
最后吐槽一句,帝国真烂!!!不知道在那个时候大家怎么看…