Autor | Zpráva | ||
---|---|---|---|
Someone Profil |
#1 · Zasláno: 22. 9. 2012, 17:48:21
Dobrý den, v PHP programuji již nějakou dobu a tak jsem se rozhodl nahlédnout i do světa objektů. Něco málo zvládám, avšak stále se mi nedaří nalézt, jakým způsobem docílit něčeho takového:
<?php $o = new mojeTrida(); // moje třída obsahuje funkci split, které vrátí explode druhého parametru, kde delimetr je parametr první $text = "Hello world!"; print_r($o->split(" ",$text)); //Já bych rád dosáhl něčeho takového $text = "Hello world!"; print_r($text->split(" ")); (jako je tomu např. v JS) ?> Jak můžu něčeho takového dosáhnout? Předem děkuji za každou radu. |
||
Majkl578 Profil |
#2 · Zasláno: 22. 9. 2012, 17:55:49
V PHP nelze.
|
||
Someone Profil |
#3 · Zasláno: 22. 9. 2012, 17:56:28
:( děkuji za info.
|
||
juriad Profil |
Podle mě to není možné (tady narážíš na rozdíl mezi prototypy - JS a třídami - php)
nemůžeš tedy volat metody na typu string, ale nad svými objekty můžeš; musíš nějak ten string změnit (obalit), například jak uvádíš v prvním případu, nebo: $o = new mojeTrida("Hello world!"); // moje třída obsahuje funkci split, které vrátí explode, kde delimetr je jediný parametr print_r($o->split(" ")); |
||
Tori Profil |
#5 · Zasláno: 22. 9. 2012, 17:58:31
Someone:
To byste musel mít nějakou třídu String, která bude obsahovat funkce pro práci s řetězci, což by ve většině případů byly jen wrappery pro nativní funkce jazyka. Aspoň kdyby se u nich vždycky předával řetězec jako první parametr, tak by to šlo relativně jednoduše přes __call, ale bohužel. |
||
Someone Profil |
#6 · Zasláno: 22. 9. 2012, 18:03:00
Je možné, že by to vypadlo nějak takto?
class mojeTrida { private $string; public function __construct($str) { $this->string = $str; } public function split($del) { return explode($del,$this->string); } } |
||
juriad Profil |
Someone:
nevidím v tom chybu, ale spíš se zamysli nad tím, jestli by to nebylo lepší opačně: class Splitter { private $delimiter; public function __construct($delimiter) { $this->delimiter = $delimiter; } public function split($text) { return explode($this->delimiter, $text); } } $podle_mezer = new Splitter(' '); $podle_mezer->split('Hello world!'); $podle_mezer->split('Na okně seděla kočka byl horký letní den'); nepotřebuješ většinou rozdělit jeden text podle více delimiterů, ale stejným způsobem rozdělit více textů |
||
Someone Profil |
#8 · Zasláno: 22. 9. 2012, 18:47:33
juriad:
S tím splitem to byl jen příklad, třída mojeTrida bude mít více funkcí, které se budou používat. Tudíš mi přijde nevýhodné dělat kvůli každé funkci (split atd..) vytvářet novou instanci. |
||
Časová prodleva: 12 let
|
0