测试环境

  • 系统 : Linux
  • 服务器 : Apache/2.2.8 (Unix) PHP/4.4.7 mod_ssl/2.2.9 OpenSSL/0.9.8c mod_fastcgi/2.4.6 Phusion_Passenger/1.9.1 DAV/2 SVN/1.4.2
  • 内存使用量 : 19.93 MByte
  • MYSQL 版本 : 5.0.45-log
  • SQL 模式 : 沒有设置
  • PHP 版本 : 5.2.6
  • PHP 安全模式 : 关闭
  • PHP 允许来自 URL : 关闭
  • PHP 内存限制 : 90M
  • PHP Max Upload Size : 7M
  • PHP Max Post Size : 8M
  • PHP Max Script Execute Time : 30s
  • PHP Exif 支持 : 是 ( V1.4 )
  • PHP IPTC 支持 : 是
  • PHP XML 支持 : 是

call.php
[code=’php’]
‘;
$a = new A();
echo $a -> a1.’
‘;
echo $a -> b -> b1.’
‘;

$a -> late();
echo $a -> b -> b1.’
‘;

echo ‘B:
‘;
// new B without a parameter, warning.
//$b = new B();
$b = new B(‘p’);
echo $b->b1.’
‘;
// Access to a private property, error.
//echo $b->b2.’
‘;

echo ‘C:
‘;
$c = new C();
?>
[/code]

define.php
[code=’php’]
‘;

// When access to a property,
// must put $this-> in front of them.
$this -> a1 = ‘aa’;
$this -> a2 = 1;
$this -> b = new B(‘not test2’);
}

function late()
{
// Not working this way
//self::b=new B(‘not test3’);

// Works fine
$this -> b = new B(‘not test3’);
}
}

class B
{
var $b1 = ‘nothing’;
private $b2 = 8;

// Can’t overwrites constructor
function B_foo()
{
echo ‘Inside B constructor
‘;
$b1 = ‘test’;
}

// Constrcutor with a parameter.
function B($what)
{
echo ‘Inside B constructor
‘;
$this -> b1 = $what;
}
}

class C extends A
{
var $c1 = 123;

function C()
{
echo ‘Inside C constructor
‘;

// This is OK.
//parent::__construct();

// This is OK too, but not so OO,
// cause sons do not know their father.
parent::A();
}
}
?>
[/code]

输出
[code=’php’]
A:
Inside A constructor
Inside B constructor
aa
not test2
Inside B constructor
not test3

B:
Inside B constructor
p

C:
Inside C constructor
Inside A constructor
Inside B constructor
[/code]

总结
PHP对于面向对象编程(OOP)的支持还是很弱的。

  • 实例化一个类只能在类外面或者类的函数中(包括构造函数),而不能随声明随new。
  • 类的构造函数可以用与类名相同的函数,或者用__construct()。构造函数不能重载,且一旦定义了带有参数的构造函数,实例化该类的时候必须传递参数,否则会报warning。
  • 类的函数中访问本类的各种属性的时候,须使用$this关键字指定本身。在我的环境中(PHP 5.2.6),self::不起作用。
  • 类的成员不声明或者使用var声明,则默认是public成员。
  • 支持继承,使用extends关键字。默认不调用基类构造函数,必须使用parent::__construct();或者parent::A();(其中A是基类的名字)来显式调用基类构造函数。parent::可以使得派生类可以访问基类的成员。protected关键字有效。
  • 实例化类的时候,如果构造函数没有参数,可以简写为new A;

Apache或IIS中,如果按照默认php.ini,会无法加载php_exif.dll模块

要想php_exif能够被成功加载,必须满足下面条件:
1. php_mbstring被启用;
2. php.ini中,php_mbstring必须在php_exif前被加载。

因此,你需要修改默认的php.ini中的这两个模块顺序(默认是字典序)
[code=’css’]
extension=php_mbstring.dll
extension=php_exif.dll
[/code]

一直有这个想法,将PHP的开源项目做个汇总,今天就把我了解的较为著名的PHP开源项目总结如下:

1、CMS系统
PHPNUKE 国外著名的CMS网站生成系统,有大量的插件及相关的各种资源
相关支持站点:
http://www.aman.38.com/phpnuke/index.php
http://phpnuke.org.cn/
http://www.cosa.org.tw/cosa_act/tm/phpnuke/

XOOPS 可扩展门户与内容管理系统
相关支持站点:http://xoops.org.cn/
以及还有如Mambo,Typo3等等。

2、网店系统
oscommerce 世界上最好的开源电子商务程序
相关支持站点:
http://www.oscommerce.com/
http://www.oscommerce-cn.com/

Zen-Cart
Zen Cart是真正的电子商务艺术,一个免费、界面友好,开放式源码的购物车软件。
相关支持站点:
http://www.zen-cart.com/
http://www.zen-cart.cn/
另外还有国产的SHOP_E,免费但不开源。

3、论坛社区
Discuz! 国内最出名的开源社区,在安全性、稳定性、速度上都有不错的表现。
http://www.discuz.net/

PhpWind 与Discuz!分庭抗争的另一款相当不错的社区软件
http://www.phpwind.com/

4、OA
C3CRM2
C3CRM是基于国际著名的SugarCRM并根据国内中小企业的特点开发的开源CRM企业应用解决方案,被设计为适用于中国范围的市场。
http://www.c3crm.com/

5、BLOG
WordPress
WordPress是一种使用PHP语言和MySQL数据库开发的Blog(博客、网志)引擎,用户可以在支持PHP和MySQL数据库的服务器上建立自己的Blog。WordPress是一个功能非常强大的博客系统,插件众多,易于扩充功能。安装和使用都非常方便。
http://wordpress.org.cn/forums/index.php

F2BLOG
http://www.f2blog.com/cn/index.htm

6、应用框架
phpcake
Zend Framework 还在完善中,不过,Zend出品,必属精品。
http://framework.zend.com/

7、数据库管理工具
PHPMYADMIN 应用于MYSQL数据库的管理
在这里不得不提一个著名的开源网,中国开源网,http://coc.oss.org.cn/。
上文可能某些地方,不准确,请朋友们多指证。