2009-09-08 15 views
6

Moja strona jest dość duża i nie używam klas PHP, nie rozumiem OO wystarczająco dobrze, aby ponownie napisać moją stronę, aby móc z nich korzystać, ale bardzo chciałbym użyć funkcji __autoload ($ class_name), której używają klasy . Liczę na wiele funkcji, mam różne pliki funkcyjne,
forums.inc.php
blogs.inc.php
user.inc.php
photos.inc.php
general.inc.phpCzy mogę automatycznie ładować pliki funkcji bez klas w PHP?

Wszystkie te pliki są tylko funkcjami właściwymi dla określonej części witryny, z tym wyjątkiem, że ogólne.inc.php będzie miało funkcje, które muszą być na każdej stronie.

Czy mogę mimo to użyć automatycznego ładowania lub zrobić coś podobnego, co załadowałoby te pliki funkcji? Kiedyś myślałem o zrobieniu tego na podstawie adresu URL, tak jak gdyby URL miał słowo fora w nim, ładowałbym plik funkcji forum, ale to nie zawsze by działało jak zawsze plik związany z forami nie ma słowa forum tam URL .

Czy jestem prawie nieobecny w opcjach, dopóki nie nauczę się kodować OO wystarczająco dobrze, aby umieścić wszystkie moje funkcje w klasach?

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

Odpowiedz

8

I nie sądzę, że można, szczerze mówiąc, nie w prosty sposób. W każdym razie czy nie byłoby przyjemniej korzystać z klas użytkowych? Nie ma nic do OOP, spójrz na to:

<?php 
    class HTMLUtil { 

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

klas/Utility Static Helper że grupa razem związane funkcjonalność są proste umieścić razem, po prostu zadeklarować swoje funkcje static:

Deklarowanie członków klasy lub metody statyczne udostępniają je bez potrzeby tworzenia instancji klasy.

Teraz możesz użyć __autoload. Nie musisz tworzyć instancji tych klas, aby korzystać z ich funkcji statycznych, a to sprawia, że ​​twój kod jest bardziej czytelny (jeśli jest trochę bardziej szczegółowy). I zawsze znaleźć bardziej satysfakcjonujące, aby zrobić coś takiego:

echo HTMLUtil::filter($str); 

zamiast:

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

W razie potrzeby można również zadeklarować prywatny konstruktor w klasach użytkowych, aby zapobiec ich wystąpienia, w celu podkreślają, że ich „tylko kilka funkcji związanych z”:

private __construct() {...} 

Aby wywołać funkcję statyczną z innej funkcji w obrębie tej samej klasy byś zrobić używając self słów kluczowych (który odwołuje się do tego samego klasę, a nie obiekt lub klasa instancji):

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

zrobić tak, ja nie wiem, mogę „owinąć” je w klasie, choć bez znając wszystkie wymyślne sposoby nazywania ich, więc będę mógł używać funkcji w taki sam sposób jak teraz, włączając w to nazwę klasy, która jest w środku i :: pomiędzy klasą i nazwą funkcji? – JasonDavis

+0

2) Również funkcja zawinięta w 1 klasę będzie mogła być wywołana z dowolnej strony, ale także wewnątrz innej funkcji, która jest wewnątrz innej klasy? Obecnie wiele moich funkcji korzysta z innych funkcji w nich zawartych, więc jeśli funkcja z klasy DB zostanie wywołana z klasy użytkownika, to i tak będzie działać poprawnie? dzięki za pomoc – JasonDavis

+0

@jasondavis - tak, SomeClass :: functionName ($ param) to sposób, w jaki nazwałbyś funkcję statyczną. – karim79