2012-01-04 31 views
5

Trình tạo lớp PHP của tôi dường như không được gọi khi lớp được khởi tạo. Đây là những gì constructor của tôi trông giống như:Trình xây dựng PHP không được gọi khi khởi tạo

public function __contruct() 
{ 
    $GLOBALS['page_content'] .= "<p>Constructor entered.</p>\r\n"; 

    try 
    { 
    $this->ConstructorBase(); 
    } 
    catch (Exception $e) 
    { 
    throw new Exception(
     "Error in ".__FILE__."(".__LINE__."): Constructor failed.", 
     CLoginError::ERROR_CANNOT_INSTANTIATE, $e); 
    } 
} 

Sau đó trong cùng một tập tin, trong phạm vi toàn cầu, tôi cố gắng để nhanh chóng lớp:

$Login = new CLogin(); 

Tuy nhiên, khi tôi kiểm tra $GLOBALS['page_content'], sau khi instantiating class, nó trống rỗng, như thể constructor chưa bao giờ được gọi. Điều kỳ lạ là tôi có thể gọi các hàm thành viên công cộng. Nếu bạn muốn nhìn thấy nó, nguồn đầy đủ được đăng ở đây:

http://pastebin.com/D95YnUmS

+1

một lỗi đánh máy bạn đã có;) – Jakub

+1

Ngoài ra TOÀN CẦU và ngoại lệ trong các nhà xây dựng là thực hành xấu – meze

+1

Ngoại lệ không phải là thực hành xấu ở tất cả trong các nhà xây dựng, nó thực sự được đề nghị trong mọi trường hợp để trigger_error và là cơ chế hợp lệ duy nhất để bắt lỗi xảy ra khi tạo đối tượng. Tôi đồng ý mặc dù trên GLOBALS, không sử dụng GLOBALS bất cứ nơi nào ... thực hành xấu xấu xấu. –

Trả lời

50

Bạn tên là chức năng của bạn __contruct() nơi nó nên __construct(). Đây là một lỗi rất phổ biến, bạn có lẽ nên ngủ một chút.

+7

Để nghĩ rằng điều này "lỗi đánh máy" đã giữ cho tôi bị mắc kẹt trong 3 tuần qua.^_^;; Tôi nghĩ tôi sẽ gọi nó là lỗi đánh máy từ địa ngục. Sống và học hỏi. Cảm ơn bạn đã giúp đỡ. Tôi rất vui khi được tiếp tục một lần nữa, và ít nhất tôi đã học được rất nhiều về việc gỡ lỗi PHP trong tiến trình. –

+0

Aye, nếu một chức năng không được gọi khi nó được yêu cầu (hoặc trên instantiation đối tượng hoặc trên một cuộc gọi chức năng thường xuyên), giả sử không có lỗi được đăng nhập, rất có thể bạn đã chỉ cần gõ sai tên chức năng (hoặc trên cuộc gọi hoặc trên khai báo hàm). Chúc may mắn lần sau: D –

+0

Chỉ cần dành gần 5 phút nhìn chằm chằm vào hai điều trên và tự hỏi ... Điều gì khác biệt. Nếu bạn đang bị đốt cháy như tôi ngay bây giờ, người đầu tiên là thiếu 's'. – teynon

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