类成员默认值
在定义类属性的时候,可以使用默认值
<?php
class A
{
//默认值
public $a = 'Hi';
private $b = 'Hello';
//方法
public function actionA()
{
}
}
创建实例
要创建一个对象的实例,使用关键字 new
<?php
$a = new A();//创建类 A 的实例
对象赋值
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。
<?php
class A
{
}
$a = new A();
$b = $a;
$c = &$a;
$d = clone $a;
$a = null;
var_dump($a,$b,$c,$d);
上述结果为
NULL
object(A)#1 (0) {
}
NULL
object(A)#2 (0) {
}
$this
伪变量 $this
可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。
<?php
class A
{
function actionA()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo '$this is not defined.'.PHP_EOL;
}
}
}
class B
{
function actionB()
{
A::actionA();
}
}
$a = new A();
$a->actionA();
A::actionA();
$b = new B();
$b->actionB();
B::actionB();
结果输出
$this is defined (A)
$this is not defined.
$this is not defined.
$this is not defined.
从结果可以看出,$this
只能在对象中使用,不能在静态方法中调用。但是如果在另一个对象(类 B)中调用静态方法,则 $this
指向该类( B )。
对象继承
一个类可以在声明中用 extends
关键字继承另一个类的方法和成员。PHP 不支持多重继承,一个类只能继承一个类。
class A
{
}
class B extends A
{
}
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final
关键字。可以通
<?php
class A
{
public function sayHi()
{
echo "Hi".PHP_EOL;
}
final public function sayBye()
{
echo "Bye".PHP_EOL;
}
}
class B extends A
{
public function sayHi()
{
parent::sayHi();
echo "Hello".PHP_EOL;
parent::sayBye();
}
//不能被覆盖,报错,练习的时候注意删除该方法
public function sayBye()
{
echo "See you";
}
}
$b = new B();
$b->sayHi();
结果输出
PHP Fatal error: Cannot override final method A::sayBye() in /home/*.php on line 27
从结果可以看到
- 使用
final
修饰的方法不能被覆盖 - 使用
parent::
可以调用父类方法或属性
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)