2009-09-08 2 views
6

Мой сайт довольно большой, и я не использую классы PHP, я недостаточно понимаю OO, но переписываю свой сайт, чтобы использовать их, но я бы очень хотел использовать функцию __autoload ($ class_name), которую используют классы , Я полагаюсь много на функции, у меня есть несколько функциональных файлов,
forums.inc.php
blogs.inc.php
user.inc.php
photos.inc.php
general.inc.phpМогу ли я авторизовать файлы функций без классов в PHP?

Все эти файлы - это просто функции, относящиеся к определенной части сайта, за исключением того, что general.inc.php будет иметь функции, которые должны быть на странице.

В любом случае я могу использовать автозагрузку или сделать что-то похожее, чтобы загрузить эти файлы функций? Я когда-то думал о том, чтобы сделать это на основе URL-адреса, например, если в URL-адресе содержались форумы слов, я бы загрузил файл функций форумов, но это не всегда срабатывало, как всегда, файл, связанный с форумами, не содержит слова форума там URL ,

Я в значительной степени из вариантов, пока не научусь кодировать OO достаточно хорошо, чтобы поместить все мои функции в классы?

//example of the autoload 
function __autoload($class_name){ 
    include('classes/' . $class_name . '.class.php'); 
} 
$time = new time(); 
$time->fn1(); 

ответ

8

Я не думаю, что вы можете, честно говоря, не прямолинейно. В любом случае, не лучше ли было бы использовать служебные классы? Там нет ничего, чтобы ООП, посмотрите на это:

<?php 
    class HTMLUtil { 

     public static function filter($str) {...} 
     public static function entities($str) {...} 
     public static function encode($str) {...} 
     ...etc... 
    } 
?> 

классы/Utility Static Helper сгруппированных связанные функции просты собрать, просто объявить свои функции в качестве static:

Объявление членов класса или методы как static делает их доступными без , нуждающихся в создании экземпляра класса.

Теперь вы можете использовать __autoload. Вам не нужно создавать экземпляры этих классов для использования любых своих статических функций, и это делает ваш код более читабельным (если немного более подробным). Я всегда нахожу это больше удовлетворения, чтобы сделать что-то вроде:

echo HTMLUtil::filter($str); 

вместо:

echo filter($str); //scary filter function, where are you from? 

При необходимости, вы можете также объявить закрытый конструктор в ваших полезных классов, чтобы предотвратить их от экземпляра, к подчеркивают, что их «просто куча сопутствующих функций»:

private __construct() {...} 

Для вызова статической функции из другой функции в пределах того же класса, вы могли бы сделать это с помощью self ключевое слово (которое ссылается на тот же класс , а не объект или экземпляр класса):

public static function foo() 
{ 
    echo self::bar() . '..and some foo'; 
} 
+0

Я люблю это, я не знаю, что я мог бы «обернуть» их в классе, хотя без зная все причудливые способы их вызова, поэтому я мог бы использовать функции так же, как сейчас, просто включив имя класса, в котором оно находится, и :: между именем класса и функции? – JasonDavis

+0

2) Также функция, завернутая в 1 класс, может быть вызвана с любой страницы, а также внутри другой функции, находящейся внутри другого класса? Как и сейчас, многие из моих функций используют другие функции внутри них, поэтому, если функция класса DB вызывается из пользовательского класса, то она все равно будет работать? спасибо за помощь – JasonDavis

+0

@jasondavis - yes, SomeClass :: functionName ($ param) - это то, как вы бы назвали статическую функцию. – karim79