2011-02-14 31 views
9

Tôi có một lớp học trong php được gọi là "SEO_URL". Tại một điểm trong lớp mà tôi có điều nàylớp php không tìm thấy khi nó được bao gồm

$class_name = "cPath_SEO_URL"; 
return $class_name::href(); 

và tôi nhận được

Fatal error: Class 'cPath_SEO_URL' not found in 
...\includes\classes\seo.class.php on line 52 

Vấn đề là tôi đã bao gồm lớp trên đầu trang của SEO_URL

include_once(/path/to/my/class); 
class SEO_URL{ 

} 

và tôi nhận được lỗi đó .

Tuy nhiên, khi tôi mã hóa cứng lớp ở đầu lớp học SEO_URL nó hoạt động. Vì vậy, điều này hoạt động.

class cPath_SEO_URL{ 
    function cPath_SEO_URL(){} 
    function href() { return "CPathHref"; } 
} 
class SEO_URL{ 
... 
     $class_name = "cPath_SEO_URL"; 
     return $class_name::href(); 
... 
} 

và điều này không

include_once(/path/to/my/class); 
class SEO_URL{ 
... 
     $class_name = "cPath_SEO_URL"; 
     return $class_name::href(); 
... 
} 

tôi đang cố gắng này trong osCommerce.

Tại sao lại như vậy?

+0

Bạn có tắt cảnh báo PHP không? PHP sẽ ném một ngoại lệ E_WARNING khi nó không thể tìm thấy tệp lớp của bạn, điều này thường sẽ được xuất ra trình duyệt nhưng nó có thể bị vô hiệu hóa. – JamesHalsall

+2

Không phạm tội, nhưng 90% đoán đoán của tôi là tệp lớp không chính xác. Bạn nên sử dụng require_once thay vì include_once để một lỗi khi đọc nó (như tên tệp sai/quyền truy cập không đầy đủ) gây ra lỗi php gây tử vong thay vì chỉ là cảnh báo. – phihag

+0

+1 cho @phihag để nói rằng bạn nên sử dụng 'require_once' thay vì' include_once' trong đó chương trình của bạn không thể sống mà không có tệp được bao gồm. Điều này sẽ cung cấp cho bạn các lỗi hữu ích khi yêu cầu thất bại chứ không phải là lỗi lạ khi bạn cố gắng sử dụng các chức năng liên quan. – Spudley

Trả lời

24

Ok, bạn sẽ không tin rằng vấn đề là gì.

Tôi đang sử dụng để mở và tập tin php gần như thế này

<? 
    ... 
?> 

không

<?php 

?> 

và các tập tin lớp học đã được mà không có thẻ <?php .. ?> nhưng <? ... ?> thẻ. Tôi đoán môi trường mà tôi đang làm bây giờ chỉ muốn <?php không phải là chỉ <?.

Nó sẽ tải lớp nhưng nó sẽ không diễn giải nó dưới dạng php.

+3

Mẹo hay, cảm ơn bạn rất nhiều! – Wiseman

+1

Đôi khi bạn thay đổi lưu trữ của bạn enviorement và hành vi này bắt đầu. Nó là cấu hình php 'short_open_tag'. –

+0

Bạn tiết kiệm cuộc sống của tôi, cảm ơn! –

1

Với

$class_name = "cPath_SEO_URL"; 
$test = new $class_name(); 
return $test::href(); 

bạn đang thực hiện cuộc gọi tĩnh trên một ví dụ. Điều đó không có ý nghĩa.
Thay vào đó bạn sẽ muốn làm

$class_name = "cPath_SEO_URL"; 
return $class_name::href(); 
+0

vâng, đó là điều tôi sẽ thấy sau đó, có điều là không thể tìm thấy lớp khi nó được đưa vào. Tuy nhiên, khi tôi hard-code lớp trong cùng một tập tin đó là ok. Bạn có bất kỳ ý tưởng tại sao nó sẽ không tìm thấy các lớp học khi nó được bao gồm? – billaraw

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