Maison >développement back-end >tutoriel php >Comment apprendre des classes et des objets en php

Comment apprendre des classes et des objets en php

怪我咯
怪我咯original
2017-06-28 13:44:491307parcourir

PHP 5 引入了新的对象模型(Object Model)。完全重写了 PHP 处理对象的方式,允许更佳性能和更多特性。

一、基本概念

1、class

每个类的定义都以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。伪变量 $this 可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。看下面例子:

Example#1 面向对象语言中的 $this 变量

<?php  
class A  
{  
function foo()  
{  
if (isset($this)) {  
echo &#39;$this is defined (&#39;;  
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.

Example#2 简单的类定义

<?php  
class SimpleClass  
{  
// 成员声明  
public $var = &#39;a default value&#39;;  
// 方法声明  
public function displayVar() {  
echo $this->var;  
}  
}  
?>

Example#3 类成员的默认值

<?php  
class SimpleClass  
{  
// 无效的类成员定义:  
public $var1 = &#39;hello &#39;.&#39;world&#39;;  
public $var2 = <<<EOD  
hello world  
EOD;  
public $var3 = 1+2;  
public $var4 = self::myStaticMethod();  
public $var5 = $myVar;  
// 正确的类成员定义:  
public $var6 = myConstant;  
public $var7 = self::classConstant;  
public $var8 = array(true, false);  
}  
?>

2、new

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

Example#4 创建一个实例

<?php  
$instance = new SimpleClass();  
?>

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

Example#5 对象赋值

<?php  
$assigned   =  $instance;  
$reference  =& $instance;  
$instance->var = &#39;$assigned will have this value&#39;;  
$instance = null; // $instance and $reference become null  
var_dump($instance);  
var_dump($reference);  
var_dump($assigned);  
?>

复制代码上例将输出:

NULL  
NULL  
object(SimpleClass)#1 (1) {  
["var"]=> 
string(30) "$assigned will have this value"  
}

3、extends

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

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

Example#6 简单的类继承

<?php  
class 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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn