PHP Zusatz
namespaces
ermöglicht Klassen, Funktionen und Konstanten in einem bestimmten Namensbereich zu organisieren, um Konflikte mit gleichnamigen Elementen aus anderen Namensbereichen (name collision) zu vermeiden
namespace Food;
require 'Apple.php';
require 'Banana.php';
use Apples;
use Bananas;
Apples\eat();
Bananas\eat();
// Apple.php
namespace Apples;
function eat() {
echo "eat APPLE";
}
// Banana.php
namespace Bananas;
function eat() {
echo "eat BANANA";
}
Aufbau:
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
autoload
spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register();
Beispiel mit benannter Funktion:
function my_autoload ($className) {
include(__DIR__ . "/" . $className . ".class.php");
}
spl_autoload_register("my_autoload");
Beispiel mit anonymer Funktion:
spl_autoload_register(function ($class) {
$directories = [
__DIR__,
__DIR__ . DIRECTORY_SEPARATOR . 'app'
];
$class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
foreach ($directories as $directory) {
$classPath = $directory . DIRECTORY_SEPARATOR . $class . '.php';
if (file_exists($classPath)) {
require_once $classPath;
return true;
}
}
throw new Exception("Class {$class} not found");
});
packagist
The PHP Package Repository @ packagist.org
DEPENDENCY @ xkcd.com
composer
A Dependency Manager for PHP @ getcomposer.org
"autoload": {
"psr-4": {
"App\\": "app/"
},
"files": [
"path/to/file.php"
]
}