手机
当前位置:查字典教程网 >编程开发 >php教程 >php基础知识:类与对象(1)
php基础知识:类与对象(1)
摘要:类的定义:以关键字class开头,后面跟着类名,可以是任何非PHP保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。伪变量$t...

类的定义:

以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。

伪变量$this

可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。

//??静态调用的内部到底是怎样的?

看个例子:

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.

/*我希望知道这个例子的内存等的具体实现,我暂时无法理解。如果有人可以讲清楚,可以告诉我。我们宿舍牛头现在正在冬眠,等他醒来,我会问。*/

new

要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。

当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。

(这几句话虽然很短,但是未必容易理解。)

例子如下:

class SimpleClass

{

// 成员声明

public $var = 'a default value';

// 方法声明

public function displayVar() {

echo $this->var;

}

}

//看下面的图.1>new 在heap(堆)中实例化一个对象。2>将指针$instance指向他

$instance = new SimpleClass();

//3>将指针$assigned指向heap中的实例化对象

$assigned = $instance;

//4>将$instance的引用(地址)赋值给$reference

$reference =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // 5>间断$instance与heap中实例的连接。

var_dump($instance);

var_dump($reference);

var_dump($assigned);

输出:

NULL

NULL

object(SimpleClass)#1 (1) {

["var"]=>

string(30) "$assigned will have this value"

}

图示整个过程:

类继承extends

一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。

被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。(继承的机制到底怎样的?)

源代码如下:

class ExtendClass extends SimpleClass

{

// Redefine the parent method

function displayVar()

{

echo "Extending classn";

parent::displayVar();

}

}

$extended = new ExtendClass();

$extended->displayVar();

输出:

Extending class

a default value

【php基础知识:类与对象(1)】相关文章:

用PHP实现登陆验证码(类似条行码状)

php实现的mongodb操作类

php实现读取内存顺序号

php准确获取文件MIME类型的方法

php遍历CSV类实例

php实现的IMEI限制的短信验证码发送类

php+oracle 分页类

如何将一个表单同时提交到两个地方处理

php中静态类与静态变量用法区别解析

第十三节 对象串行化 [13]

精品推荐
分类导航