php类与对象(一)
来源:互联网 发布:淘宝客服的工资怎么算 编辑:程序博客网 时间:2024/06/08 09:57
基本概念
class
每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义。
类名可以是任何非 PHP 保留字的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线。以正则表达式表示为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
。
一个类可以包含有属于自己的常量,变量(称为”属性”)以及函数(称为”方法”)。
Example #1 简单的类定义
<?phpclass SimpleClass{ // property declaration public $var = 'a default value'; // method declaration public function displayVar() { echo $this->var; }}?>
当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象静态调用时也可能是另一个对象)。
Example #2 $this 伪变量的示例
<?phpclass 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() { // Note: the next line will issue a warning if E_STRICT is enabled. A::foo(); }}$a = new A();$a->foo();// Note: the next line will issue a warning if E_STRICT is enabled.A::foo();$b = new B();$b->bar();// Note: the next line will issue a warning if E_STRICT is enabled.B::bar();?>
以上例程会输出:
$this is defined (A)
$this is not defined.
$this is defined (B)
$this is not defined.
new
要创建一个类的实例,必须使用 new 关键字。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。类应在被实例化之前定义(某些情况下则必须这样)。
如果在 new 之后跟着的是一个包含有类名的字符串,则该类的一个实例被创建。如果该类属于一个名字空间,则必须使用其完整名称。
Example #3 创建一个实例
<?php$instance = new SimpleClass();// 也可以这样做:$className = 'Foo';$instance = new $className(); // Foo()?>
在类定义内部,可以用 new self 和 new parent 创建新对象。
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。
Example #4 对象赋值
<?php$instance = new SimpleClass();$assigned = $instance;$reference =& $instance;$instance->var = '$assigned will have this value';$instance = null; // $instance and $reference become nullvar_dump($instance);var_dump($reference);var_dump($assigned);?>
以上例程会输出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
PHP 5.3.0 引进了两个新方法来创建一个对象的实例:
Example #5 创建新对象
<?phpclass Test{ static public function getNew() { return new static; }}class Child extends Test{}$obj1 = new Test();$obj2 = new $obj1;var_dump($obj1 !== $obj2);$obj3 = Test::getNew();var_dump($obj3 instanceof Test);$obj4 = Child::getNew();var_dump($obj4 instanceof Child);?>
以上例程会输出:
bool(true)
bool(true)
bool(true)
extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类。
被继承的方法和属性可以通过用同样的名字重新声明被覆盖。但是如果父类定义方法时使用了 final,则该方法不可被覆盖。可以通过 parent:: 来访问被覆盖的方法或属性。
当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。
Example #6 简单的类继承
<?phpclass ExtendClass extends SimpleClass{ // Redefine the parent method function displayVar() { echo "Extending class\n"; parent::displayVar(); }}$extended = new ExtendClass();$extended->displayVar();?>
以上例程会输出:
Extending class
a default value
::class
自 PHP 5.5 起,关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。这对使用了 命名空间 的类尤其有用。
Example #7 类名的解析
<?phpnamespace NS { class ClassName { } echo ClassName::class;}?>
以上例程会输出:
NS\ClassName
- php类与对象(一)
- PHP核心技术与最佳实践学习(一)面向对象
- 类与对象(一)
- PHP 类与对象
- PHP 类与对象
- PHP类与对象
- PHP 类与对象
- PHP类与对象
- 面向对象PHP(一)
- php面向对象(一)
- php面向对象(一)
- php面向对象(一)
- php面向对象(一)
- 类与对象一
- PHP 类与对象(重载)
- 实验三 类与对象 (一)
- Java类与对象(一)
- JAVA基础(一)类与对象
- CCF 201503-2 数字排序
- [TOJ 4108] Hearthstone
- Android 疑难杂症之获取listView Item上面组件的值
- web服务端的架构演变
- 【网络流】 TOJ 3854. Haitang2
- php类与对象(一)
- maven常用命令说明
- iOS多线程编程指南(三)Run Loop
- Unity3D与VS2008结合,加快Unity3D C#开发
- 从外网站点获取的html去除换行回车制表位\n\r\t
- Software caused connection abort: recv failed
- 黑马程序员--IOS基础第十四天(C语言)
- xml的第一次小试牛刀
- C 中scanf ( ) 函数用法 用法