2012-03-17 59 views
1
<?php 

abstract class file 
{ 
    private $pid; 
    private $uid; 
    public function __construct($pid,$uid) 
    { 
     $this->pid = $pid; 
     $this->uid = $uid; 
    } 

    public function valid() 
    { 
     if($_SESSION['level']<$this->pid) 
     { 
      return true; 
     } 
     else 
      return false; 
    } 
    public function allow() 
    { 
     return "This is all right!"; 
    } 

} 
?> 



    <?php 
    // put your code here 
    include("../file.php"); 
    session_start(); 
    class android extends file 
    { 
     public function __construct($pid,$uid) 
     { 
      parent::__construct($pid, $uid); 

     } 
    } 

    $uid = $_SESSION['id']; 
    $pa = new android(1,$uid); 
    if($pa->valid()) 
      echo $pa->allow(); 
    else 
      echo "<h1>No permission<h1>" 

    ?> 

上面的類是android類,上面是文件..現在,當android擴展(繼承)文件類時,它意味着它具有所有方法。但是當我嘗試運行該程序時,它說undefined變量android :: allow() 我不明白,因爲我已經在文件類中定義了allow()函數,所以android類也應該繼承該方法。 請幫助..在此先感謝。子類中未定義的方法

+0

你能後的確切的錯誤信息?另外,你可能有兩個名爲file.php的文件,而錯誤的文件正在被加載或者什麼?一開始,這看起來不錯。 – Corbin 2012-03-17 05:00:52

+0

必須同意,必須有一些你正在省略的東西。這段代碼適合我。 – bkconrad 2012-03-17 05:05:28

回答

0

http://www.php.net/manual/en/language.oop5.abstract.php

Classes defined as abstract may not be instantiated

如果你的文件類沒有任何抽象方法,不要打擾它聲明爲抽象的,否則避免調用構造函數;)

+0

致命錯誤:調用未定義的方法android :: allow()在C:\ xampp \ htdocs \ dakshh12 \ android.php在第29行 這是我得到的錯誤.. 而且valid()函數運行得很好即使它是在父類中定義的! – bluechill 2012-03-17 07:28:03

+0

事實上,我錯過了有效的()被調用而沒有造成麻煩...... @bkconrad似乎已經測試了代碼(「運行正常」),所以是的,肯定有一些你沒有做的事情。可能沒有什麼,但你給的錯誤發生在第29行,但 - 假設「<?php」在android.php的第1行 - 對$ pa-> allow()的調用在第17行。另外,android類是在這裏沒有完全聲明,因爲沒有結尾'}'(你發佈的代碼下面有什麼?)。 – 2012-03-17 12:37:01