| 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: 14 let
|
|||
0