php类
2014-01-10 14:20
225 查看
类是变量与作用于这些变量的函数的集合。变量通过var来定义,函数通过 function 来定义,而类则通过下面的语法定义:
上面的例子定义了一个 Cart 类,这个类由购物车中的商品构成的数组和两个用于从购物车中添加和删除商品的函数组成。
Warning
不能将一个类的定义分割到多个文件中。也不能将一个类的定义分割到多个 PHP 块中,除非该分割是在一个方法声明内部。以下用法将不起作用:
但是以下用法是可以的:
以下警告仅用于 PHP 4。
Caution
名称 stdClass 已经被
Zend 使用并保留。不能在 PHP 代码中定义名为 stdClass 的类。
Caution
函数名 __sleep 和 __wakeup 在
PHP 类中是魔术函数。除非想要与之联系的魔术功能,否则在任何类中都不能以此命名函数。
Caution
PHP 将所有以 __ 开头的函数名保留为魔术函数。除非想要使用一些见于文档中的魔术功能,否则建议不要在 PHP 中将函数名以 __ 开头。
在 PHP 4 中,var 变量的值只能初始化为常量。用非常量值初始化变量,需要一个初始化函数,该函数在对象被创建时自动被调用。这样一个函数被称之为构造函数(见下面)。
类也是一种类型,就是说,它们是实际变量的蓝图。必须用 new 运算符来创建相应类型的变量。
上述代码创建了两个 Cart 类的对象 $cart 和 $another_cart,对象 $cart 的方法
add_item() 被调用时,添加了 1 件 10 号商品。对于对象$another_cart,3
件 0815 号商品被添加到购物车中。
$cart 和 $another_cart 都有方法
add_item(),remove_item() 和一个 items 变量。它们都是明显的函数和变量。可以把它们当作文件系统中的某些类似目录的东西来考虑。在文件系统中,可以拥有两个不同的 README.TXT 文件,只要不在相同的目录中。正如从为了根目录访问每个文件需要输入该文件的完整的路径名一样,必须指定需要调用的函数的完整名称:在
PHP 术语中,根目录将是全局名字空间,路径名符号将是 ->。因而,名称 $cart->items 和 $another_cart->items 命名了两个不同的变量。注意变量名为 $cart->items,不是 $cart->$items,那是因为在
PHP 中一个变量名只有一个单独的美元符号。
在定义类的时候,无法得知将使什么名字的对象来访问:在编写 Cart 类时,并不知道之后对象的名称将会命名为 $cart 或者 $another_cart,还是什么其它的名字。因而你不能在类中使用 $cart->items。然而为了类定义的内部访问自身的函数和变量,可以使用伪变量 $this 来达到这个目的。$this 变量可以理解为“我自己的”或者“当前对象”。因而
'$this->items[$artnr] += $num'
可以理解为“我自己的物品数组的 $artnr计数器加 $num”或者“在当前对象的物品数组的 $artnr 计数器加 $num”。
Note:
伪变量 $this 通常未定义,如果其所在的方法是被静态调用的话。但这不是个严格规定:如果一个方法被从另一个对象内静态调用的话,则$this 会被定义。此时 $this 的值是那个发出调用的对象。用下例演示:
以上例程会输出:
<?php class Cart { var $items; // 购物车中的物品 // 将 $num 个 $artnr 物品加入购物车 function add_item($artnr, $num) { $this->items[$artnr] += $num; } // 将 $num 个 $artnr 物品从购物车中取出 function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } elseif ($this->items[$artnr] == $num) { unset($this->items[$artnr]); return true; } else { return false; } } } ?>
上面的例子定义了一个 Cart 类,这个类由购物车中的商品构成的数组和两个用于从购物车中添加和删除商品的函数组成。
Warning
不能将一个类的定义分割到多个文件中。也不能将一个类的定义分割到多个 PHP 块中,除非该分割是在一个方法声明内部。以下用法将不起作用:
<?php class test { ?> <?php function test() { print 'OK'; } } ?>
但是以下用法是可以的:
<?php class test { function test() { ?> <?php print 'OK'; } } ?>
以下警告仅用于 PHP 4。
Caution
名称 stdClass 已经被
Zend 使用并保留。不能在 PHP 代码中定义名为 stdClass 的类。
Caution
函数名 __sleep 和 __wakeup 在
PHP 类中是魔术函数。除非想要与之联系的魔术功能,否则在任何类中都不能以此命名函数。
Caution
PHP 将所有以 __ 开头的函数名保留为魔术函数。除非想要使用一些见于文档中的魔术功能,否则建议不要在 PHP 中将函数名以 __ 开头。
在 PHP 4 中,var 变量的值只能初始化为常量。用非常量值初始化变量,需要一个初始化函数,该函数在对象被创建时自动被调用。这样一个函数被称之为构造函数(见下面)。
<?php /* PHP 4 中不能这样用 */ class Cart { var $todays_date = date("Y-m-d"); var $name = $firstname; var $owner = 'Fred ' . 'Jones'; /* 不过包含有常量的数组可以 */ var $items = array("VCR", "TV"); } /* 应该这样进行 */ class Cart { var $todays_date; var $name; var $owner; var $items = array("VCR", "TV"); function Cart() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; /* etc. . . */ } } ?>
类也是一种类型,就是说,它们是实际变量的蓝图。必须用 new 运算符来创建相应类型的变量。
<?php $cart = new Cart; $cart->add_item("10", 1); $another_cart = new Cart; $another_cart->add_item("0815", 3); ?>
上述代码创建了两个 Cart 类的对象 $cart 和 $another_cart,对象 $cart 的方法
add_item() 被调用时,添加了 1 件 10 号商品。对于对象$another_cart,3
件 0815 号商品被添加到购物车中。
$cart 和 $another_cart 都有方法
add_item(),remove_item() 和一个 items 变量。它们都是明显的函数和变量。可以把它们当作文件系统中的某些类似目录的东西来考虑。在文件系统中,可以拥有两个不同的 README.TXT 文件,只要不在相同的目录中。正如从为了根目录访问每个文件需要输入该文件的完整的路径名一样,必须指定需要调用的函数的完整名称:在
PHP 术语中,根目录将是全局名字空间,路径名符号将是 ->。因而,名称 $cart->items 和 $another_cart->items 命名了两个不同的变量。注意变量名为 $cart->items,不是 $cart->$items,那是因为在
PHP 中一个变量名只有一个单独的美元符号。
<?php // 正确,只有一个 $ $cart->items = array("10" => 1); // 不正确,因为 $cart->$items 变成了 $cart->"" $cart->$items = array("10" => 1); // 正确,但可能不是想要的结果: // $cart->$myvar 变成了 $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); ?>
在定义类的时候,无法得知将使什么名字的对象来访问:在编写 Cart 类时,并不知道之后对象的名称将会命名为 $cart 或者 $another_cart,还是什么其它的名字。因而你不能在类中使用 $cart->items。然而为了类定义的内部访问自身的函数和变量,可以使用伪变量 $this 来达到这个目的。$this 变量可以理解为“我自己的”或者“当前对象”。因而
'$this->items[$artnr] += $num'
可以理解为“我自己的物品数组的 $artnr计数器加 $num”或者“在当前对象的物品数组的 $artnr 计数器加 $num”。
Note:
伪变量 $this 通常未定义,如果其所在的方法是被静态调用的话。但这不是个严格规定:如果一个方法被从另一个对象内静态调用的话,则$this 会被定义。此时 $this 的值是那个发出调用的对象。用下例演示:
<?php class A { function foo() { if (isset($this)) { echo '$this is defined ('; echo get_class($this); echo ")\n"; } else { echo "\$this is not defined.\n"; } } } class B { function bar() { A::foo(); } } $a = new A(); $a->foo(); A::foo(); $b = new B(); $b->bar(); B::bar(); ?>
以上例程会输出:
$this is defined (a) $this is not defined. $this is defined (b) $this is not defined.
相关文章推荐
- 繁体中文转换为简体中文的PHP类
- 操作Oracle的php类
- 树型结构列出指定目录里所有文件的PHP类
- PHP类(Class)入门教程第1/2页
- PHP类实例教程(十一):类中this关键字
- 2010年最新PHP类的精缩归纳
- windows环境中修复对jsp、php类网页的浏览问题
- 常用的php类、方法、函数 注释标记
- 国内最好PHP CMS系统-PHP类CMS数据负载测评报告
- PHP类与对象中的private访问控制的疑问
- 深入解读PHP类phpExcel应用
- php类的小注意事项
- PHP类中子类调用父类方法
- PHP类与继承
- PHP类UTF8编码内的繁简转换-繁体-简体
- php类常量
- PHP基础篇--PHP类名、函数名、变量大小写敏感问题
- PHP类的静态(static)方法和静态(static)变量使用介绍
- php类的定义与继承用法实例
- php类成员变量的两种定义方法