2013-01-24 174 views
0

我遇到了我的代碼問題。我已經在php頁面中包含了兩次相同的類,並且當其他人不工作時。我的代碼可能解釋得更好,然後我。與面向對象的PHP混淆

<?php 
    if($_POST['submit']){ 
     if(!class_exists('Some_Class'){ 
      include('Class.php'); 
      $obj = new Some_Class; 
      $obj->Do_something_2(); 
      } 
      unset($obj); 
     } 
?> 
<html> 
    <head></head> 
    <body> 
     <form method="post" action=""> 
     <?php 
      if(!class_exists('Some_Class')){ 
      include('Class.php'); 
      $obj = new Some_Class; 
      $obj->Do_something_1(); 
      } 
      unset($obj); 
     ?> 
      <input type="text" name=""/> 
      <input type="submit" name="submit"/> 
     </form> 
    </body> 
</html> 

現在發生的實際問題是,我在程序中在窗體中添加了一些html表單元素。當我提交表單時,我對回發做了一些檢查,如果回發被設置,則我再次包含相同的類,但在類中執行其他功能。因此,當我第一次刷新頁面時,第一類包括在表單中工作正常,但在提交表單時,類包含在檢查回發工作中,但不包括在表單中。希望我能夠解決我的問題,請告訴我在編寫代碼的方法中是否存在任何問題。

+2

爲什麼不在頁面上的任何處理之前加入類? – BenM

+0

您只需要包含一次類文件。 –

+1

而不是執行繁瑣的檢查類的存在,實現'__autoload'函數。 http://ca3.php.net/autoload – dnagirl

回答

6

這是因爲class_exists('Some_Class'))是第二次。您必須移動

$obj = new Some_Class; 
$obj->Do_something_1(); 

以外的條件。

更好的解決方案是include_once頁面頂部的類。

更好的解決方案是自動加載它。

請注意,即使您正在使用類,這仍然是一種程序風格。

+0

當我這樣做時,它給了我 致命錯誤:無法在C:\ xampp \ htdocs \ employee_monitoring_system \ include \ status.class中重新聲明類狀態。php on line 13 – Chakra

+1

你是什麼意思「那個?」 –

+0

另外我得到這個錯誤: 致命的錯誤:調用一個非對象 成員函數displayStatus(),但我認爲包括類一次將有所幫助。讓我試試一次。 – Chakra

2

如果該類存在,您正在檢查兩次。

第二個電話應該工作,如果你把它改爲:

<?php 
     if(!class_exists('Some_Class')){ 
      include('Class.php'); 
     } 

     $obj = new Some_Class; 
     $obj->Do_something_1(); 
     unset($obj); 
    ?> 

(設置這樣的支架,應該是第一次好,太)

你不是在解封類,只需一個類的對象實例。

+0

致命錯誤:調用成員函數displayStatus()在非object.Fatal ...我嘗試你的方式時得到這個錯誤 – Chakra

+0

你應該提供更多的代碼來幫助你。 – ConcurrentHashMap

+0

謝謝你。包括曾經工作過的班級 – Chakra

2

我認爲這個問題是第一次在類中定義它保持從該點定義的開始,也是include_once功能可以幫助你確保你只包括一個文件一旦

所以你需要做的是在文檔的頂部聲明一次,然後使用它,例如:

<?php 

if(!class_exists('Some_Class'){ 
    include_once('Class.php'); 

    } 

if($_POST['submit']){    
     $obj = new Some_Class; 
     $obj->Do_something_2(); 
     unset($obj); 
    } 
?> 
<html> 
    <head></head> 
    <body> 
     <form method="post" action=""> 
     <?php 
      $obj = new Some_Class; 
      $obj->Do_something_1(); 
      unset($obj); 
     ?> 
      <input type="text" name=""/> 
      <input type="submit" name="submit"/> 
     </form> 
    </body> 
</html> 

作爲一個方面你,一定要注意你的原碼你取消設置條件外$ OBJ變量是很重要的,可能會導致警告,因爲$ obj對象可能不存在,因爲它超出範圍

+0

哦,我不知道Object範圍,我會考慮這一點。 Ne的方式謝謝你的幫助。在任何處理工作正常之前,它一直包括這個類。 – Chakra

1

看起來你每次都在創建一個通用對象。使用這個:

<?php 
include_once('Class.php'); 
$obj = new Some_Class; 

if($_POST['submit']) 
{ 
    $obj->Do_something_2(); 
} 
?> 
<html> 
    <head></head> 
    <body> 
     <form method="post" action=""> 
      <?php $obj->Do_something_1(); } ?> 
      <input type="text" name=""/> 
      <input type="submit" name="submit"/> 
     </form> 
    </body> 
</html> 
+0

你的方式工作得很好。感謝您的幫助:D – Chakra

+0

很高興幫助,您可能想接受答案:) – BenM