@Klabautermann schrieb:
Hallo Michael,
eigentlich geht es mir darum zu verstehen:
Ich benutze ein „use Shopware..“ oder „use Symphony..“
Kann ich nun auf die im "use …", also in der darauf hingewiesenen php Datei und auf dessen Funktionen zugreifen?
Verstehe leider das Prinzip nicht.
L.G.
Andy
Hallo Andy,
mit „use Shopware.…“ bindest du eine Klasse eine, keine Datei!
Ein Klassenname ist immer der Name selber inkl des „Namesspaces“. Beispiel:
namespace Shopware\Storefront\Page\Product;
class ProductPageLoadedEvent extends PageLoadedEvent
{
...
}
Der Klassenname ist innerhalb PHP nicht ProductPageLoadedEvent sondern Shopware\Storefront\Page\Product\ProductPageLoadedEvent .
Immer wenn du die Klasse verwendest musst du en kompletten Namen angeben. Da dass aber immer sehr lange ist, kannst du in einer PHP Datei via use angeben, welche Klasse du verwenden möchtest. Also:
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
Dann kannst du innerhalb deiner PHP Datei einfach ProductPageLoadedEvent verwenden und PHP weiss, um welchen kompletten Namen es sich handelt.
Solltest du 2 gleiche Klassennamen haben, die aber in unterschiedlichen Namespaces liegen, kannst Alias verwenden.
Besipiel:
use Shopware\Storefront\Page\PageLoadedEvent;
use MyPlugin\Storefront\Page\PageLoadedEvent as MyPageLoadEvent;
Zu deinen Fragen (solten sie sich nicht selbst erklären):
Kann ich nun auf die im "use …", also in der darauf hingewiesenen php Datei und auf dessen Funktionen zugreifen?
Nein, mit use definierst du welche Klassen du verwendest und nicht welche Datei du laden möchtest.
Dafür bräuchtest du ein „import“ oder „require“.
wenn du schreibst "… php Datei und auf dessen Funktionen zugreifen" dann hört sich das an als ob du eine PHP Dateie mit Funktionen einbienden möchtest. Das macht man so aber nicht (mehr). Man schreibt Klassen, instanziert diese (über „new MyDataService()“ oder besser über Dependency Injection (DI)) und ruft die Funktionen innerhalb der Klassen auf. Schau dir mal eine service.xml an. Da werden Klassen per DI definiert und die sind immer mit dem kompletten Namen.
Zu „Verstehe leider das Prinzip nicht.“:
Das Prinzip nennt sich OOP oder ObjektOrientierteProgrammierung. Als Klasse versteht man ein Objekt.
Vielleicht stellst du dir die Frage, woher nun PHP weiss, welche Klasse verwendet wird, wenn du sie nicht direkt über require oder import aufrufst.
Das geheimnis nennt sich „autoloader“. Es ist kein Zufall, dass der Klassenname inkl. Namespace die Verzeichnisstruktur wieder gibt. Somit weiß der Autoloader wo er die Datei findet und liest sie automatisch ein sobald sie benötigt wird.
Hoffe das hilft dir zum Verständnis des Prinzipes weiter.
gruß
DaMardl