Jak správně na namespace? – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak správně na namespace? – PHP – Fórum – Programujte.comJak správně na namespace? – PHP – Fórum – Programujte.com

 

Homer
~ Anonymní uživatel
21 příspěvků
4. 4. 2018   #1
-
0
-

Zdravím, začínám v PHP s namespaces a mám nejspíš dost hloupou otázku..

Dejme tomu si vytvořím vlastní třídy do /lib/homer/, nastavím spl_autoload a svoje třídy budu zapisovat pod namespace homer;

Potud zatím jasno, vše funguje. Co se mi nelíbí, že všechny std volání v mé třídě, tzn. cca 90% kódu musím explicitně prefixovat "/". Když někde na něco zapomenu, někdy to nevadí, jindy to vyhodí chybu.
Existuje způsob, jak napsat třídu homer/dummy BEZ TOHO, abych na začátku uvedl "namespace homer" a pak escapoval celý zbytek kódu???

Nahlásit jako SPAM
IP: 46.135.27.–
peter
~ Anonymní uživatel
3606 příspěvků
4. 4. 2018   #2
-
0
-
Nahlásit jako SPAM
IP: 2001:718:2601:258:70a2:6d...–
Kit+14
Guru
4. 4. 2018   #3
-
0
-

#1 Homer
Tak, jak to popisuješ, to nejde. Můžeš však použít use na třídy, které budeš chtít volat uvnitř.

<?php

namespace homer;

use DOMDocument;

class Dummy {
    private $dom;

    function __construct() {
        $this->dom = new DOMDocument();
    }
}

$dummy = new Dummy();

Dá se vyhnout i tomu "use", když se v uvedeném případě vyhneš volání třídy DOMDocument uvnitř třídy, což je doporučovaný postup.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Homer
~ Anonymní uživatel
21 příspěvků
5. 4. 2018   #4
-
0
-

#3 Kit
nejsem si jistý, jestli jsem tě správně pochopil - syntaxi rozumím, ale volat jiné třídy uvnitř vlastní je přece hlavní smysl toho, proč si vlastní projekt zapouzdřit do několika svých tříd...?

aktuální (pochopitelně nesmyslný) příklad vlastní třídy - záměrně kolidující názvem s jinou

namespace homer;

class mysqli
{
   private $dummy;
   public $temp;
   function __construct()
   {
      $this->dummy = new \mysqli();
      $this->temp = \md5("test");
   }
}

Takto napsaný kód je zoufale náchylný k překlepům, nepřehledný a PHP pochopitelně ani na zapomenuté '\' neupozorní.

Měl jsem na mysli něco na způsob: 

class homer\mysqli
{
	private $dummy;
	public $temp;

	function __construct()
	{
		$this->dummy = new mysqli();
		$this->temp = md5("test");
	}
}

to ovšem nejde.

Ptám se možná hloupě, ale když už začínám, chci se naučit správnou syntaxi a nevymýšlet kolo...

Nahlásit jako SPAM
IP: 46.135.7.–
Kit+14
Guru
5. 4. 2018   #5
-
0
-

#4 Homer
Algoritmy se zapouzdřují, objekty se injektují. 

namespace homer;

class mysqli
{
   private $dummy;
   public $temp;
   function __construct($mysqli)
   {
      $this->dummy = $mysqli;
      $this->temp = \md5("test");
   }
}

V jiném namespace pak zavoláš 

$db = new MySQLi();
$myDb = new homer\mysqli($db);

Souhlasím, že je to nesmyslný příklad, ale pro ilustraci stačí. Dependency Injection ti umožní vyměnit třídu MySQLi za něco jiného, třída homer\mysqli se tak stane obecnější, vícenásobně použitelná. Navíc v ní nemusíš řešit přístup ke konfiguraci objektu třídy MySQLi, protože konfiguraci snadno uděláš ještě před tím injektováním.
 

Nahlásit jako SPAM
IP: 185.21.163.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Homer
~ Anonymní uživatel
21 příspěvků
5. 4. 2018   #6
-
0
-

#5 Kit
Díky!, jdu pokračovat v učení ;-)

Nahlásit jako SPAM
IP: 46.135.7.–
Kit+14
Guru
5. 4. 2018   #7
-
0
-

#6 Homer
K tomu učení zkus přihodit pochopení této zkratky, na kterou jsem nedávno narazil:

$who->do($what, $where, $how, $when);

Je to jen taková pomůcka pro tvorbu parametrů - zleva doprava je to od povinných údajů k nepovinným. Víc než 4 parametry se nedává, obykle si vystačíme s 0-2 parametry. Čím méně, tím lépe.

Nahlásit jako SPAM
IP: 185.21.163.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Podobná vlákna

Jak správně programovat objektově GUI — založil mnawium mnawawia

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý