PHP是目前使用最多的腳本語言之一,它的面向對象編程(OOP)能力成為了開發者熱愛之一。在PHP的OOP中,class是非常基礎且核心的一個概念。而class共用也是在class開發中一個比較重要的問題,我們需要共用的class有很多,如何解決這個問題呢?
一、基礎概念
class是一個封裝相似數據和函數的虛擬容器,在PHP中class不同于其他的編程語言,它并不是封裝出來一個”對象”而是封裝出來的一個類型,這個類型中包含著一些公共的數據和函數,他們稱之為屬性和方法。如果需要實例化的話,就可以通過new關鍵字來實例化,然后調用屬性和方法。
二、class共用的解決方案
使用場景:如果需要將多個文件共享一些功能代碼的話,通常我們就需要將這些文件的代碼放到一個獨立的class文件中來實現。
1、require_once
這是最簡單的一個方式,就是在每個文件中都加上一個require_once。但是如果存在很多個文件需要這樣操作的話,那么每個文件都會出現重復的代碼。這樣代碼量就非常的龐大。同時,這種方式并不夠優雅,也不夠直觀。代碼如下:
<?php require_once('file1.php'); require_once('file2.php'); require_once('file3.php'); //被引入的文件中的代碼 ?>2、使用namespace PHP5.3引入了namespace,也就是命名空間,在一個獨立的文件中定義多個命名空間來實現功能的共享。這樣所有需要用到這個命名空間的文件都可以用這種方式來引入,代碼如下:
<?php namespace MyNamespace; //在這里定義類 ?>3、使用自動裝載器 自動裝載器可以自動加載帶有命名空間的類,并且可以實現多層文件夾下的類自動加載。這個功能由spl_autoload_register方法實現,需要自己寫一個自動加載函數并注冊到自動加載器中。這樣在引入新的文件時就會自動調用相應的自動加載器函數。代碼如下:
<?php spl_autoload_register(function($class) { require_once __DIR__ . '/' . str_replace('\\', '/', $class) . '.php'; }); ?>三、總結 不管是使用require_once、namespace還是自動裝載器,他們都能滿足我們各自的需求,我們可以根據自己的業務需求,選用最適合自己的方式去共用class。同時,針對特定的場景選擇不同的方案會更加靈活和高效。