Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP类系列 (一)

PHP类系列 (一)

黄舟
黄舟asal
2017-02-06 09:50:161715semak imbas

写在文前:

春节将近,明天就回家啦,心情无比激动,忙了一年终于可以陪陪家人了。外地人离京后,北京宛如一座‘空城’,今天同事们聊这个事,猛然想起司马迁的一句名言:“天下熙熙,皆为利来;天下攘攘,皆为利往”,现在利的方向应该就是亲情了,风筝收线,无论过去的一年你经历了什么,也都要收拾好心情回家过年。提前祝愿各位新年快乐~

春节期间我也会践行对自己的承诺,每周至少发一篇文章。

同时也要感谢And1读者提出的宝贵建议,大家如果有什么好的建议也可以告诉我哦。

回归正文:今天说说PHP里的类。

1 什么是类

类就是将有些东西归为一类,比如猫、狗、猪,它们都是动物,我们就可以归为一类。类是抽象的,不具体的,如果将类具体就是类的对象,猫、狗就是动物类中的一个对象。学生也可以作为一类,那么小红就是学生类里的一个对象(开发中的术语也叫 ‘实例’ )

粗略点说,类就是很多方法的集合(其实还有属性,属性只是配合方法实现),这些方法是你在程序中经常会用到的一些逻辑或算法,将他们包进类里面,可以提升程序的效率,减少代码的重复。

2 类的定义

每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义。

<?php
class SimpleClass
{
    // 声明类的属性
    public $var = &#39;a default value&#39;;

    // 声明类的方法
    public function displayVar() {
        echo $this->var;
    }
}
?>

当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用。其实就是指这个类(代词)

3 类的实例

实例也就是具体的一个对象。 要创建一个类的实例,必须使用 new 关键字。

如果在 new 之后跟着的是一个包含有类名的字符串,则该类的一个实例被创建。

// 创建一个实例
<?php
$instance = new SimpleClass();

// 也可以这样做:
$className = &#39;Foo&#39;;
$instance = new $className(); // Foo()
?>

4 类的继承

可以理解成孩子继承父亲的基因。

① 一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。

② PHP不支持多重继承,一个类只能继承一个基类(其实就是一个孩子只能有一个父亲)。

③ 被继承的方法和属性可以通过用同样的名字重新声明被覆盖(可以理解为儿子改良了父亲原有的基因)。但是如果父类定义方法时使用了 final,则该方法不可被覆盖。可以通过 parent:: 来访问被覆盖的方法或属性。

④ 当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。

// 简单的类继承
<?php
class ExtendClass extends SimpleClass
{
    // 重新定义父类的方法
    function displayVar()
    {
        echo "继承类\n";
        parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

5 类名的解析 

使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。

// 类名的解析
<?php
namespace NS {
    class ClassName {
    }

    echo ClassName::class;
}
?>

// 以上输出结果: NS/ClassName

以上就是PHP类系列 (一)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:PHP 闭包(Closure)初探Artikel seterusnya:php算法学习之动态规划