1.require(),include(),require_once()和include_once()区别
然后这儿有一片关于include_once和require_once()的性能比较http://www.php100.com/html/php/lei/2013/0905/5259.html
2.PHP5的OOP特性,有一条是类的属性默认值不允许为对象类型。。。。
<?
class A{
}
class Person{
private $name; //定义属性未赋值。
private $name1 = NULL; //定义属性空值 ,与未赋值一样。
private $married = true; //用布尔型为属性赋值。
private $grade = 0; //用整形数值为属性赋值
private $eyesight = 0.1; //用浮点型数字为属性赋值
private $nationality = "China"; //用字符串为属性赋值
private $arr = array("foo" => "bar", 12 => true); // 用数组为属性赋值
//private $a = new A(); //PHP5不允许,创建对象类型赋值给属性
//private $res = opendir("abc"); // PHP5不允许使用资源类型
//private $g = $this->grade; //不允许用前面定义的属性为新属性赋值。
}
$a = new Person();
?>
refer:http://www.nowamagic.net/php/php_AttributeOfClass.php
3.PHP中类的static属性和static方法
首先,静态方法中调用非静态的属性/方法是不对的,$this是指代调用该方法的当前对象,是非静态的,所以在static方法中不能有$this.
然后貌似类的static属性的初始化比较蛋疼。不像Java,有专门的静态构造器/static块用来静态初始化。下面提供一个解决方案:
对于共有的成员解决:
class A {
static public $child;
}
A::$child = new B();
对于私有的成员,只能:
class A {
static private $child;
static public initialize() {
self::$child = new B();
}
}
A::initialize();
对PHP静态属性的讲解:http://www.nowamagic.net/php/php_StaticVariable.php
PHP静态方法:http://www.nowamagic.net/php/php_StaticMethods.php
4.阮一峰有一篇对PHP中JSON说的很好的文章:http://www.ruanyifeng.com/blog/2011/01/json_in_php.html
PHP数组只有两种形态:索引数组、关联数组
JSON只有两种形态:JSONObject、JSONArraay
PHP有json_encode()和json_decode()。将数组或对象转化成JSON。而且只接受UTF-8编码,所以这一点在有中文的时候就有问题(下面提到)。
json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。
不过有一种方法可以将索引数组强制转化为对象:
json_encode( (object)$arr );
或json_encode ( $arr, JSON_FORCE_OBJECT );
5.遇到一个问题:PHP查询MySQL数据库,字段值为中文输出为乱码。如果对象的属性中存在着中文,json_encode会将中文转换为unicode编码,例如:'胥'经过json_encode处理后变为'\u80e5'.
解决方案:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(json_encode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!
<?php
class myClass {
public $item1 = 1;
public $item2 = '中文';
function to_json() {
//url编码,避免json_encode将中文转为unicode
$this->item2 = urlencode($this->item2);
$str_json = json_encode($this);
//url解码,转完json后将各属性返回,确保对象属性不变
$this->item2 = urldecode($this->item2);
return urldecode($str_json);
}
}
$c = new myClass();
echo json_encode($c);
echo $c->to_json();
echo json_encode($c);
echo json_encode('胥');
?>
输出结果:
{item1":1,"item2":"\u4e2d\u6587"}
{item1":1,"item2":"中文"}
"u80e5"
另外在PHP文件的开头加上header("Content-type: text/html, charset:utf-8");声明页面为UTF-8编码。然后在数据库连接的时候指定数据库的字符集,这里用的PDO连接的数据库,对PDO设置UTF-8:
$this->db = new PDO(Config::$host, Config::$username, Config::$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
6.PHP中的“@”符号。
@用来抑制错误,比如:
$username = @ $_GET['username'];
$password = @ $_GET['password'];
上面如果没有“@”符号,访问URL没有加上"username"和"password"查询参数的话,页面会输出错误信息。
加上“@”符号后,页面不会输出任何信息。这种情况下,我们可以自定义有好的错误信息。
7.include_once()以及其他三个引用文件的路径问题。
只能说".."什么的都不要用!
这里有一个解决方案汇总:http://blog.youkuaiyun.com/oyd/article/details/2030293