PHP5-- 学习笔记
时间:2006-05-23 来源:cnscn2008
。布尔型
这是最简单的类型。
[color="#800080"]boolean
表达了真值,可以为 TRUE 或 FALSE。
指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都是大小写不敏感的。
// assign the value TRUE to $foo
?>
转换为布尔值
要明示地将一个值转换成
[color="#800080"]boolean
,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个
[color="#800080"]boolean
参数时,该值会被自动转换。
当转换为
[color="#800080"]boolean
时,以下值被认为是 FALSE:
-
[color="#800080"]布尔
值 FALSE
-
[color="#0000ff"]整型
值 0(零)
-
[color="#0000ff"]浮点型
值 0.0(零)
-
空白
[color="#0000ff"]字符串
和
[color="#0000ff"]字符串
"0"
-
没有成员变量的
[color="#0000ff"]数组
-
没有单元的
[color="#0000ff"]对象
-
特殊类型
[color="#0000ff"]NULL
(包括尚未设定的变量)
[color="#0000ff"]资源
)。
警告
-1 和其它非零值(不论正负)一样,被认为是 TRUE!
// bool(false)
echo gettype((bool) 1); // bool(true)
echo gettype((bool) -2); // bool(true)
echo gettype((bool) "foo"); // bool(true)
echo gettype((bool) 2.3e5); // bool(true)
echo gettype((bool) array(12)); // bool(true)
echo gettype((bool) array()); // bool(false)
?>
.定界符字符串例子
= Example of string
spanning multiple lines
using heredoc syntax.
EOD;
echo $str;
?>
.访问字符串中的字符
字符串中的字符可以通过在字符串之后用花括号指定所要字符从零开始的偏移量来访问。
// Get the first character of a string
$str = 'This is a test.';
$first = $str{0};
// Get the third character of a string
$third = $str{2};
// Get the last character of a string.
$str = 'This is still a test.';
$last = $str{strlen($str)-1};
?>
.
[color="#0000ff"]unset()
函数允许取消一个数组中的键名。要注意数组将不会重建索引。
'one', 2 => 'two', 3 => 'three' );
unset( $a[2] );
/* 将产生一个数组,定义为
$a = array( 1=>'one', 3=>'three');
而不是
$a = array( 1 => 'one', 2 => 'three');
*/
$b = array_values($a);
// Now b is array(1 => 'one', 2 =>'three')
?>
.什么 $foo[bar] 错了?
应该始终在用字符串表示的数组索引上加上引号。例如用 $foo['bar'] 而不是 $foo[bar]。但是为什么 $foo[bar] 错了呢?你可能在老的脚本中见过如下语法:
;
echo $foo[bar];
// etc
?>
这样是错的,但可以正常运行。那么为什么错了呢?原因是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。它能运行,是因为 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。例如,如果没有常量定义为 bar,PHP 将把它替代为 'bar' 并使用之。
注: 这并不意味着总是给键名加上引号。用不着给键名为
[color="#800080"]常量
或
[color="#800080"]变量
的加上引号,否则会使 PHP 不能解析它们。
);
ini_set('display_errors', true);
ini_set('html_errors', false);
// Simple array:
$array = array(1, 2);
$count = count($array);
for ($i = 0; $i ++) {
echo "\nChecking $i: \n";
echo "Bad: " . $array['$i'] . "\n";
echo "Good: " . $array[$i] . "\n";
echo "Bad: {$array['$i']}\n";
echo "Good: {$array[$i]}\n";
}
?>
注: 上面例子输出为:
Checking 0:
Notice: Undefined index: $i in /path/to/script.html on line 9
Bad:
Good: 1
Notice: Undefined index: $i in /path/to/script.html on line 11
Bad:
Good: 1
Checking 1:
Notice: Undefined index: $i in /path/to/script.html on line 9
Bad:
Good: 2
Notice: Undefined index: $i in /path/to/script.html on line 11
Bad:
Good: 2
·探测类是否已加载
[color="#009900"]if(!class_exists("cl_test"))
[color="#009900"]{
[color="#009900"]class [color="#0000ff"]cl_test
[color="#009900"]{
[color="#009900"] function cl_test()
[color="#009900"] {
[color="#009900"] echo "....";
[color="#009900"] }
[color="#009900"] }
[color="#009900"]}
[color="#009900"]
[color="#009900"]
。对像赋值
[color="#0000bb"][color="#007700"]()
[color="#0000bb"]?>
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用
[color="#0000ff"]克隆
给一个已创建的对象建立一个新实例。
[color="#0000bb"][color="#007700"]; //赋值 (产生一个新的对像和新的变量空间)
[color="#0000bb"]$reference [color="#007700"]=& [color="#0000bb"]$instance[color="#007700"]; //创建引用 (产生一个新的对像,但和$instance指向同一个对像)
[color="#0000bb"]$instance[color="#007700"]->[color="#0000bb"]var [color="#007700"]= [color="#dd0000"]'$assigned will have this value'[color="#007700"];
[color="#0000bb"]$instance [color="#007700"]= [color="#0000bb"]null[color="#007700"]; [color="#ff8000"]// $instance and $reference become null
[color="#0000bb"]var_dump[color="#007700"]([color="#0000bb"]$instance[color="#007700"]);
[color="#0000bb"]var_dump[color="#007700"]([color="#0000bb"]$reference[color="#007700"]);
[color="#0000bb"]var_dump[color="#007700"]([color="#0000bb"]$assigned[color="#007700"]);
[color="#0000bb"]?>
上例将输出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
.自动加载对象
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个常常的包含文件列表。
在 PHP 5 中,不再需要这样了。可以定义一个 __autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
注: 在 __autoload 函数中抛出的异常不能被
[color="#0000ff"]catch
语句块捕获并导致致命错误。
例子 19-5. Autoload 例子
本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 类。
[color="#0000bb"][color="#007700"]) {
require_once [color="#0000bb"]$class_name [color="#007700"]. [color="#dd0000"]'.php'[color="#007700"];
}
[color="#0000bb"]$obj [color="#007700"]= new [color="#0000bb"]MyClass1[color="#007700"]();
[color="#0000bb"]$obj2 [color="#007700"]= new [color="#0000bb"]MyClass2[color="#007700"]();
[color="#0000bb"]?>
。构造函数和析构函数
构造函数void __construct ( [mixed args [, ...]] )
PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
注: 如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。
例子 19-6. 使用新标准的构造函数
[color="#0000bb"][color="#007700"]{
function [color="#0000bb"]__construct[color="#007700"]() {
print [color="#dd0000"]"In BaseClass constructor\n"[color="#007700"];
}
}
class [color="#0000bb"]SubClass [color="#007700"]extends [color="#0000bb"]BaseClass [color="#007700"]{
function [color="#0000bb"]__construct[color="#007700"]() {
[color="#0000bb"]parent[color="#007700"]::[color="#0000bb"]__construct[color="#007700"]();
print [color="#dd0000"]"In SubClass constructor\n"[color="#007700"];
}
}
[color="#0000bb"]$obj [color="#007700"]= new [color="#0000bb"]BaseClass[color="#007700"]();
[color="#0000bb"]$obj [color="#007700"]= new [color="#0000bb"]SubClass[color="#007700"]();
[color="#0000bb"]?>
为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法,但它却又不是构造函数。
析构函数void __destruct ( void )
PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
例子 19-7. 析构函数示例
[color="#0000bb"][color="#007700"]{
function [color="#0000bb"]__construct[color="#007700"]() {
print [color="#dd0000"]"In constructor\n"[color="#007700"];
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]name [color="#007700"]= [color="#dd0000"]"MyDestructableClass"[color="#007700"];
}
function [color="#0000bb"]__destruct[color="#007700"]() {
print [color="#dd0000"]"Destroying " [color="#007700"]. [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]name [color="#007700"]. [color="#dd0000"]"\n"[color="#007700"];
}
}
[color="#0000bb"]$obj [color="#007700"]= new [color="#0000bb"]MyDestructableClass[color="#007700"]();
[color="#0000bb"]?>
和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。
注: 析构函数在脚本关闭时调用,此时所有的头信息已经发出。
注: 试图在析构函数中抛出一个异常会导致致命错误。
.Visibility 域的可见性
The visibility of a property or method can be defined by prefixing the declaration with the keywords: public, protected or private. Public declared items can be accessed everywhere. Protected limits access to inherited and parent classes (and to the class that defines the item). Private limits visibility only to the class that defines the item.
Members Visibility
Class members must be defined with public, private, or protected.
例子 19-8. Member declaration
[color="#0000bb"][color="#ff8000"]/**
* Define MyClass
*/
[color="#007700"]class [color="#0000bb"]MyClass
[color="#007700"]{
public [color="#0000bb"]$public [color="#007700"]= [color="#dd0000"]'Public'[color="#007700"];
protected [color="#0000bb"]$protected [color="#007700"]= [color="#dd0000"]'Protected'[color="#007700"];
private [color="#0000bb"]$private [color="#007700"]= [color="#dd0000"]'Private'[color="#007700"];
function [color="#0000bb"]printHello[color="#007700"]()
{
echo [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]public[color="#007700"];
echo [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]protected[color="#007700"];
echo [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]private[color="#007700"];
}
}
[color="#0000bb"]$obj [color="#007700"]= new [color="#0000bb"]MyClass[color="#007700"]();
echo [color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]public[color="#007700"]; [color="#ff8000"]// Works
[color="#007700"]echo [color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]protected[color="#007700"]; [color="#ff8000"]// Fatal Error
[color="#007700"]echo [color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]private[color="#007700"]; [color="#ff8000"]// Fatal Error
[color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]printHello[color="#007700"](); [color="#ff8000"]// Shows Public, Protected and Private
/**
* Define MyClass2
*/
[color="#007700"]class [color="#0000bb"]MyClass2 [color="#007700"]extends [color="#0000bb"]MyClass
[color="#007700"]{
[color="#ff8000"]// We can redeclare the public and protected method, but not private
[color="#007700"]protected [color="#0000bb"]$protected [color="#007700"]= [color="#dd0000"]'Protected2'[color="#007700"];
function [color="#0000bb"]printHello[color="#007700"]()
{
echo [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]public[color="#007700"];
echo [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]protected[color="#007700"];
echo [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]private[color="#007700"];
}
}
[color="#0000bb"]$obj2 [color="#007700"]= new [color="#0000bb"]MyClass2[color="#007700"]();
echo [color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]public[color="#007700"]; [color="#ff8000"]// Works
[color="#007700"]echo [color="#0000bb"]$obj2[color="#007700"]->[color="#0000bb"]private[color="#007700"]; [color="#ff8000"]// Undefined
[color="#007700"]echo [color="#0000bb"]$obj2[color="#007700"]->[color="#0000bb"]protected[color="#007700"]; [color="#ff8000"]// Fatal Error
[color="#0000bb"]$obj2[color="#007700"]->[color="#0000bb"]printHello[color="#007700"](); [color="#ff8000"]// Shows Public, Protected2, not Private
[color="#0000bb"]?>
注: The PHP 4 method of declaring a variable with the var keyword is no longer valid for PHP 5 objects. For compatibility a variable declared in php will be assumed with public visibility, and a E_STRICT warning will be issued.
Method Visibility
Class methods must be defined with public, private, or protected. Methods without any declaration are defined as public.
例子 19-9. Method Declaration
[color="#0000bb"][color="#ff8000"]/**
* Define MyClass
*/
[color="#007700"]class [color="#0000bb"]MyClass
[color="#007700"]{
[color="#ff8000"]// Contructors must be public
[color="#007700"]public function [color="#0000bb"]__construct[color="#007700"]() { }
[color="#ff8000"]// Declare a public method
[color="#007700"]public function [color="#0000bb"]MyPublic[color="#007700"]() { }
[color="#ff8000"]// Declare a protected method
[color="#007700"]protected function [color="#0000bb"]MyProtected[color="#007700"]() { }
[color="#ff8000"]// Declare a private method
[color="#007700"]private function [color="#0000bb"]MyPrivate[color="#007700"]() { }
[color="#ff8000"]// This is public
[color="#007700"]function [color="#0000bb"]Foo[color="#007700"]()
{
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]MyPublic[color="#007700"]();
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]MyProtected[color="#007700"]();
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]MyPrivate[color="#007700"]();
}
}
[color="#0000bb"]$myclass [color="#007700"]= new [color="#0000bb"]MyClass[color="#007700"];
[color="#0000bb"]$myclass[color="#007700"]->[color="#0000bb"]MyPublic[color="#007700"](); [color="#ff8000"]// Works
[color="#0000bb"]$myclass[color="#007700"]->[color="#0000bb"]MyProtected[color="#007700"](); [color="#ff8000"]// Fatal Error
[color="#0000bb"]$myclass[color="#007700"]->[color="#0000bb"]MyPrivate[color="#007700"](); [color="#ff8000"]// Fatal Error
[color="#0000bb"]$myclass[color="#007700"]->[color="#0000bb"]Foo[color="#007700"](); [color="#ff8000"]// Public, Protected and Private work
/**
* Define MyClass2
*/
[color="#007700"]class [color="#0000bb"]MyClass2 [color="#007700"]extends [color="#0000bb"]MyClass
[color="#007700"]{
[color="#ff8000"]// This is public
[color="#007700"]function [color="#0000bb"]Foo2[color="#007700"]()
{
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]MyPublic[color="#007700"]();
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]MyProtected[color="#007700"]();
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]MyPrivate[color="#007700"](); [color="#ff8000"]// Fatal Error
[color="#007700"]}
}
[color="#0000bb"]$myclass2 [color="#007700"]= new [color="#0000bb"]MyClass2[color="#007700"];
[color="#0000bb"]$myclass2[color="#007700"]->[color="#0000bb"]MyPublic[color="#007700"](); [color="#ff8000"]// Works
[color="#0000bb"]$myclass2[color="#007700"]->[color="#0000bb"]Foo2[color="#007700"](); [color="#ff8000"]// Public and Protected work, not Private
[color="#0000bb"]?>
.Static Keyword
静态属性或方法可以不用类的对像引用.
静态属性只能由类名或静态方法引用。
静态属性和方法不能由子类重新引用。
静态的声明必须在可见性控制之后进行.
为了保持对PHP4的兼容性,如果没有可见性声明则默认为是public可见性.
因为静态属性和方法可以不用对像引用,所以伪变量$this对静态量无效。
例子 19-13. Static member example
[color="#0000bb"][color="#0000bb"]Foo
[color="#007700"]{
public static [color="#0000bb"]$my_static [color="#007700"]= [color="#dd0000"]'foo'[color="#007700"];
public function [color="#0000bb"]staticValue[color="#007700"]() {
return [color="#0000bb"]self[color="#007700"]::[color="#0000bb"]$my_static[color="#007700"];
}
}
class [color="#0000bb"]Bar [color="#007700"]extends [color="#0000bb"]Foo
[color="#007700"]{
public function [color="#0000bb"]fooStatic[color="#007700"]() {
return [color="#0000bb"]parent[color="#007700"]::[color="#0000bb"]$my_static[color="#007700"];
}
}
print [color="#0000bb"]Foo[color="#007700"]::[color="#0000bb"]$my_static [color="#007700"]. [color="#dd0000"]"\n"[color="#007700"];
[color="#0000bb"]$foo [color="#007700"]= new [color="#0000bb"]Foo[color="#007700"]();
print [color="#0000bb"]$foo[color="#007700"]->[color="#0000bb"]staticValue[color="#007700"]() . [color="#dd0000"]"\n"[color="#007700"];
print [color="#0000bb"]$foo[color="#007700"]->[color="#0000bb"]my_static [color="#007700"]. [color="#dd0000"]"\n"[color="#007700"]; [color="#ff8000"]// Undefined "Property" my_static
// $foo::my_static is not possible
[color="#007700"]print [color="#0000bb"]Bar[color="#007700"]::[color="#0000bb"]$my_static [color="#007700"]. [color="#dd0000"]"\n"[color="#007700"];
[color="#0000bb"]$bar [color="#007700"]= new [color="#0000bb"]Bar[color="#007700"]();
print [color="#0000bb"]$bar[color="#007700"]->[color="#0000bb"]fooStatic[color="#007700"]() . [color="#dd0000"]"\n"[color="#007700"];
[color="#0000bb"]?>
例子 19-14. Static method example
[color="#0000bb"][color="#007700"]{
public static function [color="#0000bb"]aStaticMethod[color="#007700"]() {
[color="#ff8000"]// ...
[color="#007700"]}
}
[color="#0000bb"]Foo[color="#007700"]::[color="#0000bb"]aStaticMethod[color="#007700"]();
[color="#0000bb"]?>
.Class Abstraction
PHP5引入了抽象类和方法的概念。
抽像类至少含有一个抽像方法。
抽像类不允许实例化。
抽像方法仅被定义为一个应用接口,不能被应用(必须由子类定义它的实现)
抽像类的子类必须实现抽像类中的所有方法(保持接口不变),否则子类也只能是一个抽像类,而不能实例化。
例子 19-16. Abstract class example
[color="#0000bb"][color="#0000bb"]AbstractClass
[color="#007700"]{
[color="#ff8000"]// Force Extending class to define this method
[color="#007700"]abstract protected function [color="#0000bb"]getValue[color="#007700"]();
abstract protected function [color="#0000bb"]prefixValue[color="#007700"]([color="#0000bb"]$prefix[color="#007700"]);
[color="#ff8000"]// Common method
[color="#007700"]public function [color="#0000bb"]printOut[color="#007700"]() {
print [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]getValue[color="#007700"]() . [color="#dd0000"]"\n"[color="#007700"];
}
}
class [color="#0000bb"]ConcreteClass1 [color="#007700"]extends [color="#0000bb"]AbstractClass
[color="#007700"]{
protected function [color="#0000bb"]getValue[color="#007700"]() {
return [color="#dd0000"]"ConcreteClass1"[color="#007700"];
}
public function [color="#0000bb"]prefixValue[color="#007700"]([color="#0000bb"]$prefix[color="#007700"]) {
return [color="#dd0000"]"{$prefix}ConcreteClass1"[color="#007700"];
}
}
class [color="#0000bb"]ConcreteClass2 [color="#007700"]extends [color="#0000bb"]AbstractClass
[color="#007700"]{
public function [color="#0000bb"]getValue[color="#007700"]() {
return [color="#dd0000"]"ConcreteClass2"[color="#007700"];
}
public function [color="#0000bb"]prefixValue[color="#007700"]([color="#0000bb"]$prefix[color="#007700"]) {
return [color="#dd0000"]"{$prefix}ConcreteClass2"[color="#007700"];
}
}
[color="#0000bb"]$class1 [color="#007700"]= new [color="#0000bb"]ConcreteClass1[color="#007700"];
[color="#0000bb"]$class1[color="#007700"]->[color="#0000bb"]printOut[color="#007700"]();
echo [color="#0000bb"]$class1[color="#007700"]->[color="#0000bb"]prefixValue[color="#007700"]([color="#dd0000"]'FOO_'[color="#007700"]) .[color="#dd0000"]"\n"[color="#007700"];
[color="#0000bb"]$class2 [color="#007700"]= new [color="#0000bb"]ConcreteClass2[color="#007700"];
[color="#0000bb"]$class2[color="#007700"]->[color="#0000bb"]printOut[color="#007700"]();
echo [color="#0000bb"]$class2[color="#007700"]->[color="#0000bb"]prefixValue[color="#007700"]([color="#dd0000"]'FOO_'[color="#007700"]) .[color="#dd0000"]"\n"[color="#007700"];
[color="#0000bb"]?>
上例将输出:
ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
.接口
接口只定义方法的原型但不用去定义方法的实现。
引用接口的类必须定义接口中定义的方法的实现。
接口用interface关键字来定义, 就像class关键字来定义类,只是不定义任何方法的实现
接口中定义的所有方法必须为public可见性
类可以继承并实现多个接口
例子 19-17. Interface example
[color="#0000bb"][color="#ff8000"]// Declare the interface 'iTemplate'
[color="#007700"]interface [color="#0000bb"]iTemplate
[color="#007700"]{
public function [color="#0000bb"]setVariable[color="#007700"]([color="#0000bb"]$name[color="#007700"], [color="#0000bb"]$var[color="#007700"]);
public function [color="#0000bb"]getHtml[color="#007700"]([color="#0000bb"]$template[color="#007700"]);
}
[color="#ff8000"]// Implement the interface
// This will work
[color="#007700"]class [color="#0000bb"]Template [color="#007700"]implements [color="#0000bb"]iTemplate
[color="#007700"]{
private [color="#0000bb"]$vars [color="#007700"]= array();
public function [color="#0000bb"]setVariable[color="#007700"]([color="#0000bb"]$name[color="#007700"], [color="#0000bb"]$var[color="#007700"])
{
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]vars[color="#007700"][[color="#0000bb"]$name[color="#007700"]] = [color="#0000bb"]$var[color="#007700"];
}
public function [color="#0000bb"]getHtml[color="#007700"]([color="#0000bb"]$template[color="#007700"])
{
foreach([color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]vars [color="#007700"]as [color="#0000bb"]$name [color="#007700"]=> [color="#0000bb"]$value[color="#007700"]) {
[color="#0000bb"]$template [color="#007700"]= [color="#0000bb"]str_replace[color="#007700"]([color="#dd0000"]'{' [color="#007700"]. [color="#0000bb"]$name [color="#007700"]. [color="#dd0000"]'}'[color="#007700"], [color="#0000bb"]$value[color="#007700"], [color="#0000bb"]$template[color="#007700"]);
}
return [color="#0000bb"]$template[color="#007700"];
}
}
[color="#ff8000"]// This will not work
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
[color="#007700"]class [color="#0000bb"]BadTemplate [color="#007700"]implements [color="#0000bb"]iTemplate
[color="#007700"]{
private [color="#0000bb"]$vars [color="#007700"]= array();
public function [color="#0000bb"]setVariable[color="#007700"]([color="#0000bb"]$name[color="#007700"], [color="#0000bb"]$var[color="#007700"])
{
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]vars[color="#007700"][[color="#0000bb"]$name[color="#007700"]] = [color="#0000bb"]$var[color="#007700"];
}
}
[color="#0000bb"]?>
.重载Overloading
============================================================================
.Check for Internet Explorer
[color="#0000bb"][color="#007700"]if ([color="#0000bb"]strpos[color="#007700"]([color="#0000bb"]$_SERVER[color="#007700"][[color="#dd0000"]'HTTP_USER_AGENT'[color="#007700"]], [color="#dd0000"]'MSIE'[color="#007700"]) !== [color="#0000bb"]FALSE[color="#007700"]) {
echo [color="#dd0000"]'You are using Internet Explorer.
'[color="#007700"];
}
[color="#0000bb"]?>
[color="#0000bb"]
[color="#0000bb"].php.ini
extension_dir = "D:\PHP5\ext" //php的extensions目录
default_charset = "gbk"
session.save_path = "d:/php5/session"
LoadModule php5_module modules/php5apache2.dll
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
[MySQL]
mysql.default_port = 3306
mysql.default_host = localhost
mysql.default_user =
mysql.default_password =
extension = php_mysql.dll
.
empty()
把"", 0, "0", NULL, FALSE, array(), var $var, 没有属性的对像都认为是 空,即返回True
register_globals = ON
REQUEST_METHOD: GET, HEAD, POST, PUT
REQUEST_TIME: 请求开始时的时间戳
QUERY_STRING: URL第一个?号之后的内容
DOCUMENT_ROOT:
HTTP_ACCEPT
HTTP_ACCEPT_CHARSET
SERVER_PROTOCOL
$_GLOBAL
$_SERVER
$_GET
$_POST
$_COOKIE
$_FILES
$_ENV
$_SESSION
$_REQUEST
define("CONSTANT", "Hello world");
echo CONSTANT;
__FILE__
__LINE__
PHP_VERSION
PHP_OS
E_ERROR
E_WARNING
E_PARSE
E_NOTICE
file_exists("a.txt")
is_writable("a.txt")
$arrLines = file("a.txt");
string file_get_contents("a.txt");
相关阅读 更多 +