2014-06-21 127 views
-1

我有一個名爲emailUtility.php一個實用工具類,如下所示:什麼是在PHP中創建另一個類的對象的正確方法?

<?php 
class emailUtility 
{ 
    public function SendMail($subject,$body) 
    {    

    } 

} 
?> 

我有兩個班,在這裏我想用emailUtility類的這種SendMail方法。 我有第一類(Test1.php),使用下面的emailUtility。

<?php 
include("emailUtility.php") 
class Test1 
{ 
    $emailUtil=new emailUtility(); 
    $emailUtil->SendMail("",""); 
} 

?> 

現在,當我試圖以相同的方式在另一個類中使用相同的emailUtility類時,它不起作用。但是,當我從Test1中刪除emailUtility的使用時,Test2工作正常。 不工作意味着瀏覽時,也不會爲同一文件中的其他代碼部分生成HTML。

<?php 
include("emailUtility.php") 
class Test2 
{ 
    $emailUtil=new emailUtility(); 
    $emailUtil->SendMail("",""); 
} 

?> 

我該如何在多個其他類中使用一個類? 另外,它是這樣,一個類可以只包含一次在PHP?

+0

使用'include_once'而不是'include'。 – Boann

+0

你的意思是在班上? –

回答

0

根據我的理解,您可能會多次包含emailUtility.php文件,並且會導致您的程序崩潰,因爲這些類將被覆蓋。 只是

include_once("emailUtility.php"); 
+0

謝謝,工作! –

0

兩個原因更換下面

include("emailUtility.php"); 

行爲什麼擦出:

  1. 類不能在PHP重新聲明。通過使用include,您將腳本包含了兩次,因此類聲明瞭兩次,因此是致命錯誤。

  2. 您忘記了在類名中聲明方法/變量。語法錯誤。

嘗試開啓錯誤報告以查看錯誤而不是白頁。在申請的最早階段包括此行:error_reporting(E_ALL);Check doc here

解決方案

  1. 變化includeinclude_once代替。

    Differences

    • include將包括一個腳本,並顯示警告,如果沒有找到
    • include_once腳本將包括劇本嚴格的一次,並顯示警告,如果沒有找到
    • require腳本將包括腳本,並在腳本未找到時拋出致命錯誤
    • require_once將包含腳本一次,並在腳本未找到時拋出致命錯誤


2.聲明你Test1.php如下:

Test1.php

<?php 
include_once("emailUtility.php"); 
class Test1 { 
    /** 
    * @var emailUtility 
    */ 
    public $emailUtility; 

    public function __construct() { 

     //Note that we usually define class names as CamelCase "EmailUtility" 
     //so it will be much more readable. For this case, ideal case should be 
     //$this->emailUtility = new EmailUtility(); 

     $this->emailUtility = new emailUtility(); 
    } 

    /** 
    * My send email 
    */ 
    public function mySendEmail() { 
     $this->emailUtility->SendMail(); 
    } 
} 

而且Test2.php應遵循相同的聲明。

有一點需要注意,將類名定義爲CamelCase總是一個好習慣,例如EmailUtility。它使代碼更具可讀性。

相關問題