Namespace en use - Php: Kan iemand mij dat uitleggen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Hans Teeuwen

Hans Teeuwen

29/01/2016 15:21:15
Quote Anchor link
Kan iemand mij in makkelijke taal uitleggen wat namespace en use doet in php?

Bij voorbaat dank.

Get,

Toevoeging op 29/01/2016 15:24:51:

Voorbeeld:

use app\models\Country;

// get all rows from the country table and order them by "name"
$countries = Country::find()->orderBy('name')->all();

// get the row whose primary key is "US"
$country = Country::findOne('US');

// displays "United States"
echo $country->name;

// modifies the country name to be "U.S.A." and save it to database
$country->name = 'U.S.A.';
$country->save();

// Komt uit Yii 2 documentatie - ben MVC en Frameworks aan het leren..
 
PHP hulp

PHP hulp

22/12/2024 15:47:43
 
Ben van Velzen

Ben van Velzen

29/01/2016 15:50:17
Quote Anchor link
Namespaces kun je vergelijken met de directorystructuur op je hardeschijf. Use geeft aan welke implementatie van een class je wilt gebruiken. Je kunt meerdere classes met dezelfde naam hebben zolang ze in andere namespaces zitten.
 
Hans Teeuwen

Hans Teeuwen

29/01/2016 17:13:30
Quote Anchor link
Maar waarom wordt deze daar dan ingezet? Wat voor functie heeft deze als ik vragen mag? Dat snap ik juist niet.

Kijk die use heb je goed uitgelegd. Dat is me nou veel meer helder nu.

In iedere geval bedankt.
Gewijzigd op 29/01/2016 17:13:51 door Hans Teeuwen
 
Ben van Velzen

Ben van Velzen

29/01/2016 17:40:27
Quote Anchor link
Het wordt erin gezet voor de duidelijkheid van je code. Zeker als je een grote codebase hebt is het handig om namespaces te gebruiken voor bijvoorbeeld het framework, de models etc. Wanneer je een goede IDE hebt maakt dit het bouwen veel eenvoudiger.
 
Ozzie PHP

Ozzie PHP

29/01/2016 19:34:08
Quote Anchor link
Stel dat wij voor hetzelfde project een class maken met daarin een paar eigen functies en we zouden die class allebei MyFunctions noemen. Als we nu een class zouden aanmaken via $my_functions = new MyFunctions() maken we dan jouw class aan of de mijne? Nu komen namespaces van pas. Dankzij namespaces kunnen beide classes in het project voorkomen, maar worden ze gekoppeld aan hun eigen namespace.
 
Hans Teeuwen

Hans Teeuwen

31/01/2016 21:55:24
Quote Anchor link
Dus namespaces hebben verder geen functie dan dat ze helderheid verschaffen? Lees ik dat nou goed uit jouw antwoord :)?

Use heb je wel gewoon duidelijk uitgelegd.

Toevoeging op 31/01/2016 21:56:12:

Dankjewel ozzie. Helder.
 
Ben van Velzen

Ben van Velzen

31/01/2016 22:04:58
Quote Anchor link
Functioneel voegt het niet veel toe, niet op dezelfde manier als dat een language construct als for, if of foreach dat doen. Het is "syntactic sugar", je kunt namelijk Ozzie aangeeft zonder verdere hacks meerdere classes met dezelfde naam hebben. Dit is handig in de grotere codebases, en als je naam een framework als Symfony of Laravel kijkt kun je zien hoe namespaces goed gebruikt kunnen worden.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/02/2016 00:25:43
Quote Anchor link
Er is nog een voordeel van namespaces die hier niet genoemd wordt. In de grotere projecten (maar ook in frameworks als Symfony) staat iedere class in een apart bestand. Dus de MyFunctions staat in MyFunctions.php.
Om nou niet iedere class die je wilt gaan gebruiken handmatig te includen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
include_once 'AppBundle/Core/MyFunctions.php';

wordt een autoloader functie gebruikt.

Als de MyFunctions class in de AppBundle/Core namespace gedeclareerd wordt dan is de volledige classnaam AppBundle/Core/MyFunctions. een handig geschreven autoloaderfunctie maakt hier zo een filepath van (bijvoorbeeld C:\myprojects\current\AppBundle\Core\MyFunctions.php) en include vervolgens het bestand wanneer dit nog niet gedaan was.

Namespaces zijn dus ook heel handig in combinatie met een autoloader. (Nooit meer includes gebruiken yeaahh!)
 
Ben van Velzen

Ben van Velzen

01/02/2016 00:29:48
Quote Anchor link
Echter gebruikt Symfony een iets geavanceerdere autoloader, die een gegeven path recursief doorzoekt op classes, en hier een classmap van maakt. Gewoon met de hulp van token_get_all(). Hierdoor kunnen classes in willekeurige folders staan en nog steeds gevonden worden als je een nieuwe map aanmaakt. De methode die je noemt vind ik zelf overigens ook niet heel prettig, omdat een standaard opbouw "Company\Component\SubComponent" is, terwijl je dan iets krijgt als "App\Classes\Etc1\Etc2". Uiteraard zijn hier de verschillende PSR standaarden voor, maar Symfony doet het in ieder geval in één van zijn loaders op de beschreven manier.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.