Mógłbyś bardziej wyjaśnić, o co chodzi z pierwszym zdaniem:
Witam, mam do was takie jedno pytanie. Czy includowanie pliku z funkcjami i używanie ich bezpośrednio, a używanie funkcji w klasie czymś się różni ?
Bo jeśli chodzi ci o:
class User {
public function login(){
doSomething();
}
}
function doSomething(){
echo "we are doing something";
}
To się używa, ale baaaardzo rzadko. Dlaczego? Bo tworzenie kolejnych poziomów abstrakcji jest lepsze :d
Ewentualnie, jak potrzebujesz jakiś helperów, to tworzysz albo statyczne klasy z helperami (Yii2), albo traity(Laravel).
Helper to funkcja wspomagająca. Taka, która, gdy przyjmuje taki sam argument, za każdym razem zwraca identyczny.
Edit:
Odpisalem na to pytanie poprzednio :P
Wyzwalanie funkcji przez:
User::login();
Jest identyczne, jakbyś wyzwalał funkcje normalną.
Ale tak jak pisałem, używanie takich funkcji powinno się sprowadzać do helperów:
Helper to funkcja wspomagająca. Taka, która, gdy przyjmuje taki sam argument, za każdym razem zwraca identyczny.
Dlaczego powinno? Zmieniając zmienne statyczne lub globalne, mozemy nie moc zdebugowac problemu, a nasza aplikacja może działać w sposób dla nas, lub innego developera nie logicznie, czyli tak, jakbyśmy sobie tego życzli.
Samo "includowanie" wiąże się z ładowaniem plików. Oczywiście klasy są ładowane przez loadera: http://php.net/manual/en/function.spl-autoload-register.php który przeważnie jest inicjowany przez composera: https://getcomposer.org/ . Pliki z czystymi funkcjami trzeba ładować ręcznie (poprawcie mnie jeśli się myle). Composer oczywiście oferuje funkcjonalność ładowania takich plików. Ale dalej on są ładowane stale. Czyli nie wtedy, kiedy tworzymy dany obiekt, lub odwołujemy sie do funkcji statycznej.
Dobrym przykładem użycia helpera jest: (chyba że używasz twiga, co w 90% jest lepsze)
https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseHtml.php#L138 //polecam przeczytać całą funkcje
złym natomiast jest użycie:
<?php
class User{
private static $currentUser;
public static function login(){
$_SESSION['id'] = self::$currentUser->id;
$_SESSION['logged'] = true;
}
}
Laravel trochę inaczej podchodzi do podobnych problemów, co też nie jest zbyt dobrym rozwiązaniem:
https://github.com/illuminate/database/blob/master/Eloquent/Model.php#L1326
Czyli przy każdym staticu wyzwalany jest new i dana metoda.
TLDR:
Chodzi o stosowanie abstrakcji, myślenie obiektowe i dostępność. Nie wszędzie potrzebujemy funkcionalności logowania, co nie?