2011-10-12 29 views
9

Tôi nhận được thông báo lỗi "biến Không xác định: khoảng thời gian trong C: \ wamp \ www \ DGC \ Classes \ DateFilter.php"PHP - biến lớp học cá nhân đưa ra lỗi: không xác định biến

Đây là mã của tôi cho DateFilter lớp học:

class DateFilter extends Filter 
{ 
    //@param daysOld: how many days can be passed to be included in filter 
    //Ex. If daysOld = 7, everything that is less than a week old is included 
    private $interval; 

    public function DateFilter($daysOld) 
    { 
     echo 'days old' . $daysOld .'</ br>'; 
     $interval = new DateInterval('P'.$daysOld.'D'); 
    } 


    function test() 
    { 
     echo $interval->format("%d days old </br>"); 
     //echo 'bla'; 
    } 

} 

Khi tôi tạo một phiên bản mới của lớp DateFilter và kiểm tra cuộc gọi() nó cho tôi lỗi. Tôi nhận ra nó có nghĩa là biến không được khởi tạo, nhưng tôi biết rằng hàm tạo đang được gọi bởi vì tôi đặt một câu lệnh echo trong đó và nó là đầu ra.

Tôi cũng đã thử: $ this :: $ interval-> format (...); self :: $ interval-> format (...); nhưng không hoạt động.

Tôi biết đây có lẽ là một cách khắc phục dễ dàng, xin lỗi vì câu hỏi noob. Không thể tin rằng điều này làm tôi bối rối.

Trả lời

27

Bạn phải sử dụng $this->interval để truy cập biến thành viên interval bằng PHP. Xem PHP: The Basics

class DateFilter extends Filter 
{ 
    private $interval; // this is correct. 

    public function DateFilter($daysOld) 
    { 
     $this->interval = new DateInterval('P'.$daysOld.'D'); // fix this 
    } 

    function test() 
    { 
     echo $this->interval->format("%d days old </br>");  // and fix this 
    } 
} 
+0

echo $ this -> $ interval-> format ("% d days old
"); Cũng đang cho tôi lỗi này:/ – CHawk

+6

xóa ký hiệu đô la thứ hai. Đó là $ this-> interval –

+1

Tôi luôn tìm thấy khá "lạ" khi PHP buộc bạn sử dụng '$ this' để truy cập các trường đối tượng. Nhiều ngôn ngữ khác như C# sẽ không (nếu biến không trùng tên với địa phương). Dù sao thì việc sử dụng 'điều này' luôn là một thực hành tốt, IMHO: nó giúp bạn xem nhanh các thuộc tính của đối tượng và tránh nhầm lẫn với các biến cục bộ. – gremo

2
function test() 
{ 
    echo $this->interval->format("%d days old </br>"); 
} 
0

cố gắng

public var $interval; 

echo $this->interval; 
3

$interval là địa phương để các chức năng. $this->interval tham chiếu tài sản cá nhân của bạn.

class DateFilter extends Filter 
{ 
    //@param daysOld: how many days can be passed to be included in filter 
    //Ex. If daysOld = 7, everything that is less than a week old is included 
    private $interval; 

    public function DateFilter($daysOld) 
    { 
     echo 'days old' . $daysOld .'</ br>'; 
     $this->interval = new DateInterval('P'.$daysOld.'D'); 
    } 


    function test() 
    { 
     echo $this->interval->format("%d days old </br>"); 
     //echo 'bla'; 
    } 

} 
+0

Tuyệt vời, đó là phần cuối cùng của câu đố tôi đã mất tích. – CHawk

Các vấn đề liên quan