PHP a velmi pochybne chovani "namespace" – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

PHP a velmi pochybne chovani "namespace" – PHP – Fórum – Programujte.comPHP a velmi pochybne chovani "namespace" – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
nigaloslav0
Newbie
1. 4. 2014   #1
-
0
-

Ahoj,

mejme nasledujici PHP kod

<?php
/**
 * @package \Core\Other\Help
 * @author ...
*/

namespace Core\Other\Help;
use \Core\Error;



/**
 * Autoload trida pro automaticke nacitani a vytvareni trid
*/
class Autoload {
	/**
	 * Bajpasuje standardni 'new' - kontroluje, zdali vytvarena trida skutecne existuje...
	 * @param string $file
	 * @param string $error_name
	 * @return $class
	*/
	static public function _new($class, $error_name = 'Error\EClass\NotExists') {
		if(file_exists($class . '.php')) {
			return new $class();
		} else if($error_name) {
			throw new $error_name('File or Class ' . $class . ' does not exists!');
		}
	}
}

pri spusteni PHP zahlasi

"require_once(Error\EClass\NotExists.php): failed to open stream: No such file or directory"

Pokud mu ale $error_name nahradim rovnou "Error\EClass\NotExist" pak vse probehne bez problem...

Vypada to, jako by PHP neumelo generovat FQN, pokud chci tridu vytvorit pomoci "odkazu".

Nejake navrhy jak to opravit a pritom nepredavat jako parameter FQN?

(FQN - fully qualified name)

Honza

Nahlásit jako SPAM
IP: 2001:1ab0:f15:0:a48c:a455...–
Kit+15
Guru
1. 4. 2014   #2
-
0
-

#1 nigaloslav
Máš snad něco proti standardnímu autoloaderu? Proč vynalézáš kolo?

Nahlásit jako SPAM
IP: 37.48.32.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
nigaloslav0
Newbie
2. 4. 2014   #3
-
0
-

#2 Kit
Vzhledem k tomu, ze standardni autoloader pouzivam (SPL_autoload_register).

Standardni autoloader vypada nejak takto:

__autoload($class_name) {

    require_once $class_name . '.php';

}

Tady neni problem v autoloaderu ale ve zcestnych PHP namespace...

Nahlásit jako SPAM
IP: 94.113.68.–
Kit+15
Guru
2. 4. 2014   #4
-
0
-

#3 nigaloslav
Narážel jsem na metodu "_new", která je zbytečná. Vlastně je zbytečná celá třída.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
nigaloslav0
Newbie
2. 4. 2014   #5
-
0
-

#4 Kit
Pokud vim, pak jsem se neptal, jestli je dana trida zbytecna nebo ne :). .

Opravdu nikdo nevi, proc PHP neumi stanovit uplny nazev tridy v tomto pripade? Je to "bug" nebo neco delam spatne?

Pro automaticke nahravani trid mam funkci "__autoload" viz. vyse. Cesta k tride je shodna s namespace (tedy pro \A\B\C\Trida mam cestu A/B/C/Trida) 

Honza

Nahlásit jako SPAM
IP: 2001:1ab0:f15:0:8df7:86b5...–
nigaloslav0
Newbie
2. 4. 2014   #6
-
0
-

Ahoj,

reseni jsem nalezl zde

http://www.php.net/manual/en/language.namespaces.dynamic.php#example-226

Proste PHP :D...

Nahlásit jako SPAM
IP: 2001:1ab0:f15:0:8df7:86b5...–
Kit+15
Guru
2. 4. 2014   #7
-
0
-

#5 nigaloslav
Šlo mi jen o to, že zrušením třídy Autoload zmizí i problém.

Odpověď na otázku zní: Děláš to blbě.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
nigaloslav0
Newbie
2. 4. 2014   #8
-
0
-

#7 Kit
?????????????????

Tady vubec nejde o to, k cemu dana tida slouzi, ale o to, jak se PHP chova k 'namespace'! Proboha! Je to kus osekaneho kodu ktery je vytrzen z kontextu!!!!!!!!!!!!!!!!!!!!!!!!!!!~!

Kdyz vytvorim tridu se jmenem "\Moje\Mila\Velka\Trida" a pote jinde v kodu pouziji

use Moje\Mila;

$var = 'Mila\Velka\Trida'; $_t = new $var();

pak dostanu hlasku, ktera je uvedena v mem prvnim prispevku. Coz mi proste a jednoduse prijde zvlastni...

Nahlásit jako SPAM
IP: 2001:1ab0:f15:0:8df7:86b5...–
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, 21 hostů

Podobná vlákna

Namespace v proměnné — založil Míša

XML s namespace v C# — založil Kolemjdoucí

XAML - zahrnutí namespace — založil Petrroll

Napojení na jiný namespace — založil TomasUL

 

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