Próbuję uniknąć zadeklarowania funkcji w globalnym obszarze nazw. W bardzo rzadkich przypadkach, gdzie mogę to zrobić, to podczas dodawania implementacje przestrzeni użytkownika funkcji, które nie są w mojej wersji PHP, na przykład
if(false === function_exists('lcfirst'))
{
function lcfirst($str) { /* ... */}
}
funkcje, to może iść w compatibility.php które mogłyby być zawarte w plik bootstrap, więc są one dostępne w całej aplikacji, a sprawdzenie do function_exists
zapewnia, że nie napotkasz problemów, gdy wersja PHP ma natywne wsparcie dla tej funkcji.
Dla wszystkich innych funkcji, spróbowałbym najpierw sprawdzić, czy nie mogą najpierw przejść do dedykowanego obiektu. Zwykle "losowe" funkcje są po prostu niewłaściwie umieszczone.Sprawdź, które obiekty wykorzystują twoje funkcje narzędziowe, a następnie sprawdź, czy możesz tam przenieść metody. Może czeka na wyjście superklasa. Zobacz także Information Expert pattern.
Jeśli nie ma obiektów, które można by zastosować, można je pogrupować w statyczny moduł o nazwie Utils w unikalnej przestrzeni nazw, aby nie zagracały globalnej przestrzeni nazw. W ten sposób możesz być pewien, że nie kolidujesz z innymi funkcjami stron trzecich w zasięgu globalnym.
Przed 5.3, ja bym grupę im following the PEAR naming convention i poprzedzenie nazwy klas po strukturze folderów, na przykład wtedy, gdy moduł jest w com/mattmueller/utils.php
, można użyć
class Com_MattMueller_Utils
{
public static function something($a, $b) { /* ... */ }
}
Od PHP5.3, my „ve got prawdziwy namespaces i można zrobić
namespace com\mattmueller\Utils;
class Utils
{
public static function something($a, $b) { /* ... */ }
}
w JavaScript nie ma nazw, ale może easily simulate them dodając funkcje do obiektu, np
// JavaScript
var com = (com) ? com : {};
com.mattmueller = {
'Utils': {
'something' : function(a,b) { /* ... */ }
}
};
Wspólne struktury zazwyczaj również realizują funkcje dla creating namespaces.
Awesome! Dzięki za spostrzeżenia. Yah Naprawdę chciałbym móc korzystać z przestrzeni nazw PHP, ale mój hosting nie ma jeszcze 5.3. – Matt
@Matt dobrze, nadal możesz pójść z podejściem PEAR, które zauważyłem, lub po prostu użyć nazwy klasy, która raczej nie będzie się kolidować, np. 'MMUtils' jeśli zbyt długo znajdziesz nazwę klasy opartą na nazwie domeny. – Gordon