属性
定义
类的变量成员叫做属性
。属性声明是由访问控制关键字 public
,protected
或 private
和一个变量来组成,同时可以加上默认值。
<?php
class A
{
//只能在类本身使用
private $a = "Hello";
//可以在子类和类本身使用
protected $b = <<<EOT
This is variable b;
EOT;
//除了子类,类本身,外部也可以访问
public $c;
}
访问属性
在类的成员方法里面,可以通过 $this->
加变量名来访问类的属性和方法,但是要访问类的静态属性或者在静态方法要使用 self::
加变量名。
注意 self::
这种方式后的变量名需要加 $
符号,而 $this->
后的变量名不需要加
<?php
class A
{
private $a = "Hello";
protected $b = <<<EOT
This is property b
EOT;
public static $c = 'This is a'.' static property';
public function talk()
{
echo $this->a.PHP_EOL;
echo $this->b.PHP_EOL;
echo self::$c;
}
}
(new A())->talk();
结果输出
Hello
This is property b
This is a static property
类常量
我们可以在类中定义常量。常量的值将始终保持不变。在定义和使用常量的时候不需要使用 $
符号。
<?php
class A
{
const ENV = 'env';
const HELLO = 'Hello';
}
接口(interface)中也可以定义常量
<?php
interface B
{
const ENV = 'ENV';
public function sayHi();
}
自动加载对象
要进行一个类操作时,需要先将该类加载进来,例如 include
,require
等。
如果要执行的类很多,则需要大量 include
操作,会导致重复加载,管理苦难等一系列问题。
在 PHP 5 中,不用这样做了,可以使用 spl_autoload_register()
函数来注册任意数量的自动加载器。
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
new A();
new B();
本例尝试分别从 A.php 和 B.php 文件中加载 A 和 B 类,相当于
<?php
include 'A.php';
include 'B.php';
new A();
new B();
构造和析构函数
构造函数
void __construct()
创建一个对象时( new
操作),构造函数会自动调用
class A
{
public function __construct()
{
echo 'init...'.PHP_EOL;
}
public function sayHi()
{
echo "hi";
}
}
(new A())->sayHi();
输出结果为
init...
hi
实例化 A 的时候执行构造函数。
注意: 如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用parent::__construct()。
<?php
class A
{
public function __construct()
{
echo "A";
}
}
class B extends A
{
public function __construct()
{
parent::__construct();
echo "B";
}
}
new A(); // A
new B(); // AB
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)