2010-02-08 49 views
34

Tôi đang cố gắng sử dụng một phương thức từ bên trong một phương thức khác trong một lớp. Tôi không có nhiều kinh nghiệm trong PHP5 OOP, và tôi nhìn xung quanh để tìm câu trả lời, nhưng không thể tìm thấy bất kỳ câu trả lời nào. Tôi đang cố gắng sử dụng getClientInfo() trong sendRequest(), trong cùng một lớp.gọi phương thức từ phương thức khác trong cùng lớp PHP

class DomainHandler { 

    public static function getClientInfo($db, $client_id) 
    { 
     //Do stuff 
    } 

    public static function sendRequest($details) 
    { 

     require_once('MySQL.class.php'); 
     $db = new MySQL; 

     getClientInfo($db, $client); 
    } 
} 

Và nó nói với tôi:

Fatal error: Call to undefined function getClientInfo()

Tôi cũng đã thử

parent::getClientInfo($db, $client); 

$this->getClientInfo($db, $client); 

vô ích.

Bất kỳ ý tưởng nào?

Trả lời

40

Đó là phương pháp tĩnh nên bạn phải gọi bằng self::getClientInfo hoặc DomainHandler::getClientInfo.

Ngoài ra: Bạn có thể muốn đọc về lập trình hướng đối tượng vì có vẻ như bạn chưa hiểu nó thực sự là gì (không chỉ đặt các hàm giữa lớp Foo {và})

+3

Cảm ơn! Có Tôi biết tôi biết rất ít về OOP đầy đủ (PHP5), nhưng tiếc là ông chủ của tôi sẽ không cho tôi một ngày nghỉ để đọc về một cái gì đó ông muốn cố định ngay bây giờ. :) Tbh, tôi không thực sự biết tại sao bạn có tĩnh và công khai trước khi một phương pháp ?? Nhưng tôi sẽ đến đó. Cảm ơn một lần nữa vì sự giúp đỡ. –

3

'tự' là từ khóa bạn đang tìm kiếm

cho biết, bạn có thể giải thích lý do bạn cần phương pháp tĩnh? "tĩnh" là phong cách kém và nên tránh.

+1

Tôi sẽ không nói rằng 'tĩnh' là phong cách nghèo eventhough tôi đồng ý trong trường hợp này mà nó có thể không được sử dụng một cách chính xác. tĩnh có một nơi và đôi khi không làm cho một cái gì đó tĩnh sẽ là phong cách xấu. Tôi đồng ý rằng mặc dù nhiều người sử dụng phương pháp tĩnh sai và sử dụng các lớp học chỉ như bạn sẽ sử dụng C + + không gian tên với chỉ phương pháp tĩnh => _that_ là phong cách xấu. – dbemerlin

17

Bạn đang khai báo các hàm là static và do đó chúng không nằm trong ngữ cảnh đối tượng – bạn có thể gọi chúng bằng DomainHandler::getClientInfo() hoặc self::getClientInfo().

Nếu bạn không rõ ràng cần các chức năng tĩnh, bạn có thể thả từ khóa static và sau đó $this->getClientInfo() sẽ hoạt động.

+0

và nếu anh ta muốn phương pháp tĩnh? – Natrium

+4

@Natrium, sau đó anh ấy có thể sử dụng những gì tôi đề xuất trước. –

+2

xin lỗi, phải có cát trong mắt của tôi ... – Natrium

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