Temat: False Friend Class pattern ;)
Janusz Matyja:
Przypadkiem przeglądałem sobie ten wątek i naszła mnie pewna myśl, mianowicie:
Czy większości was nie bolą przypadkiem tyłki od ciągłego ich spinania?
Gość zauważył pewną nową funkcjonalność w PHP, przyszedł mu do głowy sposób jej wykorzystania (mniejsza z tym czy dobry czy zły) zażartował że teraz to wzorzec projektowy, a wy zamiast potraktować to jako żart programistyczny, najchętniej posadzilibyście go na stosie.
Trochę luzu Panowie.
Wiesz, żeby jeszcze się to do czegoś mogło rzeczywiście przydać to może bym zrozumiał ale biorąc pod uwagę co przedstawił - lepiej było mu takie głupie pomysły wybić z głowy. Już bardziej przypadł mi do gustu pomysł jaki gdzieś widziałem i sobie nawet zapisałem na lepsze czasy kiedy PHP będzie demonem prędkości :)
Użycie:
$String = new String('Darek');
echo $String->cut(0, 3)->lcfirst()->reverse(); // rad
Wraz z PHP 5.4 będzie można zrobić chyba coś takiego (pewny nie jestem bo jakoś zapomniałem to sprawdzić):
echo (new String('Darek'))->cut(0, 3)->lcfirst()->reverse(); // rad;
Żeby było ciekawiej, oryginał używa również gettext (
http://php.net/manual/en/book.gettext.php ) do tłumaczenia :) Odradzam korzystanie z takich pomysłów w realnej aplikacji w PHP. Nawet biorąc pod uwagę że 5.4 jest znacząco szybsze niż 5.3 ( podobno po "przeczyszczeniu" interpretera nawet o 40% szybsze ) to i tak przekształcenie każdego ciągu znaków w aplikacji do klasy może znacząco wpłynąć na wydajność. Gdzie w sumie znam takich zdolnych co to zrobili.
Teraz przynajmniej jest temat do dyskusji :P
Wyciąłem z uwagi na długość. Oryginał ma chyba wszystkie funkcje od stringów :) Ot po to żebyście widzieli koncepcję.
class String {
protected $string = '';
public function __construct($string = '') {
$this->string = (string)$string;
}
public function getLength() {
return strlen($this->string);
}
public function getExplode($delimeter, $limit = null) {
return explode($delimeter, $this->string, $limit);
}
public function cut($start, $length = null) {
$this->string = substr($this->string, (int)$start, $length);
return $this;
}
public function ucfirst() {
$this->string = ucfirst($this->string);
return $this;
}
public function lcfirst() {
$this->string = lcfirst($this->string);
return $this;
}
public function toUpper() {
$this->string = strtoupper($this->string);
return $this;
}
public function toLower() {
$this->string = strtolower($this->string);
return $this;
}
public function reverse() {
$this->string = strrev($this->string);
return $this;
}
public function addslashes() {
$this->string = addslashes($this->string);
return $this;
}
public function stripslashes() {
$this->string = stripslashes($this->string);
return $this;
}
public function htmlspecialchars() {
$this->string = htmlspecialchars($this->string);
return $this;
}
public function trim($characters = null) {
$this->string = trim($this->string, $characters);
return $this;
}
public function ltrim($characters = null) {
$this->string = ltrim($this->string, $characters);
return $this;
}
public function rtrim($characters = null) {
$this->string = rtrim($this->string, $characters);
return $this;
}
public function before($string) {
$this->string = (string)$string.$this->string;
return $this;
}
public function after($string) {
$this->string .= (string)$string;
}
public function __toString() {
return $this->string;
}
}
Dariusz Półtorak edytował(a) ten post dnia 26.06.12 o godzinie 10:13