2015-12-09 176 views
0

目前我正在嘗試瞭解OOP如何應用於PHP,並且在進入繼承時遇到了調用我的類的問題。OOP PHP需要類,擴展

我使用下面的PHP代碼:

require_once("init.php"); 

$table = new Table(); 
$table->draw(); 

$customer1 = new Customer(); 

因爲表類只是一個普通類(非繼承),它會正確加載。

中的init.php具有以下PHP代碼:

function __autoload($class_name) { 
require_once('classes/'.$class_name . '.class.php'); 
} 

因爲客戶類inhereting User類,爲客戶類的代碼是User類中,但是__autoload函數試圖現在調用customer.class.php。

我的Customer類會是這個樣子:

class User 
{ 
    private $_username; 

    public function __construct($name) 
    { 
     $this->_username = $name; 
    } 

    public function getUsername() 
    { 
     return $this->_username; 
    } 
} 

class Customer extends User 
{ 
    public function __construct() 
    { 
     //some code here 
    } 
} 

藤誰能解釋我,請我應該怎麼稱呼繼承的類與PHP?

+3

'因爲客戶類inhereting User類,爲客戶類的代碼是用戶class'裏面沒有任何意義....什麼你的客戶類的定義? –

+0

'__autoload()'將運行PHP遇到的任何/所有類,即使它是繼承類,它也沒有在任何地方定義過。 – Ian

+0

一個繼承的類是一個像其他任何類一樣的類。使用它沒有區別。這裏究竟發生了什麼問題? – David

回答

2

每個文件只能有一個類。只要你的自動加載會處理你的一切,因爲每個類是在它自己的文件,命名爲同樣的方式...

把你所有的客戶類代碼裏面Customer.class.php

2

每班應寫在它自己的文件中,完全是因爲這個自動加載。沒有理由爲什麼class Customer必須與class User位於同一個文件中,只需將其放入自己的文件中,並且自動加載器將正確處理它。

否則,你將不得不採取一些其他的命名方式,譜寫出更加智能的自動加載機可與不同名稱的文件查找類。 (不要做,不是真的。)

+0

是的,這是我想要做的,但延伸仍然在這裏工作呢? – Barrosy

+0

@Barrosy繼承是否仍然有效。 – Daan

+1

@Barrosy是的,絕對。唯一的要求是'User'類被加載/可以自動加載當PHP命中'擴展用戶'語句;沒有規定該類必須在同一個文件中。事實上,通常情況下,您將繼承第三方庫類,這些類的文件當然不會編輯。 – deceze