konto usunięte

Temat: False Friend Class pattern ;)

Generalnie jest to dobry sposób na zje*anie kodu pogwałceniem enkapsulacji i zaciemnieniem go jeszcze bardziej, niż to potrzebne. Nie użyłbym tego w produkcji w żadnym projekcie, do którego kodu źródłowego może ktokolwiek zajrzeć w ciągu najbliższej dekady.

Jako ciekawostka typu "baba z brodą" daje radę.

konto usunięte

Temat: False Friend Class pattern ;)

pytanie za 100 pkt. czy ww. opisana metoda będzie działać w kolejnych wersjach PHP? jeżeli nie to mamy spory problem z migracją do nowszego środowiska w przyszłości
Janusz Matyja

Janusz Matyja WebDeveloper

Temat: False Friend Class pattern ;)

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.

konto usunięte

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
Jacek R.

Jacek R. programista

Temat: False Friend Class pattern ;)

Ale String powinien być immutable, według wzorca (:P) ;)

konto usunięte

Temat: False Friend Class pattern ;)

Jacek R.:
Ale String powinien być immutable, według wzorca (:P) ;)

To nie moje :P Jak by przeszukał to by znalazł podobną klasę w tej grupie którą kiedyś pokazałem. Gdzie jeżeli mnie pamięć nie myli właśnie tak było.
To leżało w zakładkach. @Janusz pytał o ciekawostki to wrzuciłem co ludziska wymyślają w związku z wykorzystaniem magii :PDariusz Półtorak edytował(a) ten post dnia 26.06.12 o godzinie 11:19
Bartłomiej Jończy

Bartłomiej Jończy iOS / Java EE
Developer

Temat: False Friend Class pattern ;)

Czy tylko dla mnie to nie ma sensu? W C++ friend class to coś zupełnie, zupełnie innego. Tam decydujesz co i komu chcesz udostępnić, a tutaj równie dobrze mógłbyś dać wszędzie public. Jeśli coś jest prywatne, to takie ma pozostać. Z resztą, widzę, że przedmówcy już swoje powiedzieli na ten temat :) A i taki szczegół - wzorzec projektowy jest czymś więcej niż prostą klasą napisaną w jednym języku i wykorzystującą kilka jego specyficznych cech :)

konto usunięte

Temat: False Friend Class pattern ;)


Obrazek

konto usunięte

Temat: False Friend Class pattern ;)

Bartłomiej Jończy:
Czy tylko dla mnie to nie ma sensu?

Jaka jest różnica między Friend Class a FALSE Friend Class? Co oznacza "Przyszło mi na myśl, że mogą umożliwiać zaprzyjaźnianie klas. Po chwili jednak zmieniłem zdanie - wszak klasy w C++ mogą wybierać przyjaciół, tutaj przyjaciele się narzucają."? To jakaś paranoja :D

[To pytania retoryczne ;)]

Ale nie po to by to pisać łąmię EOT. EOT łamię, by dodać kolejną ciekawostkę ;) Zastosowanie ciekawostki #1, do którego chyba niczyja wyobraźnia nie doszła - oprócz mojej: spaczonej. Dzieci - nie róbcie tego w domu. (Choć w sumie czemu nie?)

http://pastebin.com/jTZXQcLy

Oczywiście zaraz się na mnie ktoś rzuci, bo coś... dlatego przezornie robię EOT i tego tematu ;)Łukasz K. edytował(a) ten post dnia 26.06.12 o godzinie 21:42

konto usunięte

Temat: False Friend Class pattern ;)

Dariusz Półtorak:
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

cóż, niezbyt dobrze świadczy to o tym języku, jak zwykłe klasy do obsługi stringów to jakiś super wyczyn, który być może będzie się dało zaaplikować kiedyś tam, jak PHP będzie demonem prędkości... ;)

konto usunięte

Temat: False Friend Class pattern ;)

Łukasz Lityński:
cóż, niezbyt dobrze świadczy to o tym języku, jak zwykłe klasy do obsługi stringów to jakiś super wyczyn, który być może będzie się dało zaaplikować kiedyś tam, jak PHP będzie demonem prędkości... ;)

Po prostu nie warty świeczki jest narzut jaki nam da kilka setek obiektów String obecnie. Nawet biorąc pod uwagę przyśpieszenie jakie dostało PHP 5.4. Więc operacje na ciągach realizuje się głównie za pomocą funkcji co jest po prostu wydajniejsze. Rozwiązaniem jako takim była by wbudowana klasa String w postaci rozszerzenia.

Jedną takową napisaną w PHP wypatrzyłem raz na google code
http://wklejto.pl/128067

Rozszerzenie mi jeszcze w oczy nie wpadło. Dariusz Półtorak edytował(a) ten post dnia 27.06.12 o godzinie 08:30

konto usunięte

Temat: False Friend Class pattern ;)

Rozwiązaniem jako takim była by wbudowana klasa String w postaci rozszerzenia.
I dlatego ludzie odchodzą od PHP ;)

PHP za ileś lat, jak będzie "demonem szybkości":

$String = new String('Darek');
echo $String->cut(0, 3)->lcfirst()->reverse(); // rad


Python dzisiaj:

string = 'Darek'
print string.lower()[2::-1] # rad
Bartłomiej Jończy

Bartłomiej Jończy iOS / Java EE
Developer

Temat: False Friend Class pattern ;)

Łukasz Lityński:
I dlatego ludzie odchodzą od PHP ;)

Kto odchodzi? Patrząc na oferty pracy, to raczej przychodzą :)
Python może i ma nieco nowocześniejszą składnię, ale ma swoje dziwactwa, które potrafią denerwować. Nie przeczę, to dobry język (nawet bardzo), ale mimo wszystko uważam, że jest czymś zupełnie innym niż php.

konto usunięte

Temat: False Friend Class pattern ;)

Łukasz Lityński:
Rozwiązaniem jako takim była by wbudowana klasa String w postaci rozszerzenia.
I dlatego ludzie odchodzą od PHP ;)

PHP za ileś lat, jak będzie "demonem szybkości":

$String = new String('Darek');
echo $String->cut(0, 3)->lcfirst()->reverse(); // rad


Python dzisiaj:

string = 'Darek'
print string.lower()[2::-1] # rad

O ile się zgadzam że w wypadku Pythona jest to o wiele przyjemniejsze o tyle nie zgadzam się że ludzie odchodzą od PHP. Zresztą jeżeli wierzyć tej infografice
http://www.udemy.com/blog/modern-language-wars/

To:
~ najwięcej ofert pracy jest dla programistów PHP
~ jeżeli chodzi o prędkość, nie będzie już odstawał w wypadku 5.4 (jeżeli 40% przyśpieszenie jest prawdą)
~ ma 14x większą społeczność niż Python

Inna sprawa że język jest jaki jest a Python urzeka już samą składnią :) Dlaczego PHP jest taki popularny ? Można wymyślać i wymyślać. Ja wiem jedno. Na rynku jest olbrzymia ilość języków programowania. Po prostu jedne się wybijają, inne nie z różnych powodów. Ale jeżeli ktoś by mnie pytał o zdanie to powiem że osobiście czekam na rozwój Node.js z prostej przyczyny.

Cholernie miło by było pisać w tym samym języku po obu stronach barykady (klient i serwer)Dariusz Półtorak edytował(a) ten post dnia 27.06.12 o godzinie 14:24
Jacek R.

Jacek R. programista

Temat: False Friend Class pattern ;)

Oj znowu zaczyna się ta sama dyskusja... :) PHP jest popularny, bo jest popularny - to się samo napędza. Prawdopodobnie na rynku sklepów i cmsów jest faktycznie najlepiej rozprzestrzeniony i pełno takich ofert pracy. Nie zapominajmy jednak, że na rynku enterprise PHP praktycznie nie istnieje. Nie samymi cmsami i aplikacjami konsumenckimi świat żyje :)
Bartłomiej Jończy

Bartłomiej Jończy iOS / Java EE
Developer

Temat: False Friend Class pattern ;)

Jacek R.:
Oj znowu zaczyna się ta sama dyskusja... :) PHP jest popularny, bo jest popularny - to się samo napędza. Prawdopodobnie na rynku sklepów i cmsów jest faktycznie najlepiej rozprzestrzeniony i pełno takich ofert pracy. Nie zapominajmy jednak, że na rynku enterprise PHP praktycznie nie istnieje. Nie samymi cmsami i aplikacjami konsumenckimi świat żyje :)

Ale Ruby i Python na rynku enterprise też w zasadzie nie istnieją. Tam króluje Java, .NET i wszystko co pochodne.

konto usunięte

Temat: False Friend Class pattern ;)

Dariusz Półtorak:
Jacek R.:
Ale String powinien być immutable, według wzorca (:P) ;)

To nie moje :P Jak by przeszukał to by znalazł podobną klasę w tej grupie którą kiedyś pokazałem. Gdzie jeżeli mnie pamięć nie myli właśnie tak było.
To leżało w zakładkach. @Janusz pytał o ciekawostki to wrzuciłem co ludziska wymyślają w związku z wykorzystaniem magii :P

To jakieś badziewie, dobrze że nie Twoje. Zastanawiałem się dlaczego nikt nie scentralizuje wszystkich funkcji PHP dot. łańcuchów - i teraz wiem... htmlspecialchars() średnio by do tego pasował. A wg jakiego klucza je wybierać? Nadal byłby to jakiś kompromis.

Po drugie nazwy funkcji powinny zawierać nazwę czynności, czemu "before" i "after" przeczą.
No i tak samo jak oryginały nie trzymają się kupy (nazwy).

konto usunięte

Temat: False Friend Class pattern ;)

Piotr L.:
Dariusz Półtorak:
Jacek R.:
Ale String powinien być immutable, według wzorca (:P) ;)

To nie moje :P Jak by przeszukał to by znalazł podobną klasę w tej grupie którą kiedyś pokazałem. Gdzie jeżeli mnie pamięć nie myli właśnie tak było.
To leżało w zakładkach. @Janusz pytał o ciekawostki to wrzuciłem co ludziska wymyślają w związku z wykorzystaniem magii :P

To jakieś badziewie, dobrze że nie Twoje. Zastanawiałem się dlaczego nikt nie scentralizuje wszystkich funkcji PHP dot. łańcuchów - i teraz wiem... htmlspecialchars() średnio by do tego pasował. A wg jakiego klucza je wybierać? Nadal byłby to jakiś kompromis.

Po drugie nazwy funkcji powinny zawierać nazwę czynności, czemu "before" i "after" przeczą.
No i tak samo jak oryginały nie trzymają się kupy (nazwy).

Raczej w przykładzie chodziło o wykorzystanie magii do zapodania klasy String jako takiej w PHP. To co urodziłem raz było bliższe tej (z google code, podałem wyżej) http://wklejto.pl/128067 i jestem pewien że gdzieś na goldenline szwenda się przykład z niej.
Pamiętam że zapodawałem tylko nie wiem czy na pewno tutaj.

Ogólnie PHP pozwala na dużo rzeczy ale jak to ktoś raz powiedział - wcale to nie znaczy że powinniśmy je robić. Dariusz Półtorak edytował(a) ten post dnia 28.06.12 o godzinie 21:40
Bartłomiej Jończy

Bartłomiej Jończy iOS / Java EE
Developer

Temat: False Friend Class pattern ;)

Wydaje mi się, że omawiane funkcjonalności (klasa String) bardziej pasują do StringBuilder (C#/Java). Moim zdaniem, jeśli język nie ma wbudowanej klasy String, to nie ma sensu pakować jej na siłę. Wszystko zależy też od środowiska, w jakim się to wykorzystuje. Kiedy np. większość stringów ląduje w Twig'u, to tam sprawę załatwiają filtry. W Zend_View helpery itd. itp. To, że w PHP dużo rzeczy załatwianych jest funkcjami ma też swoje plusy - pozwala na większą elastyczność przy ich wykorzystaniu (wszak można napisać klasę wykorzystującą funkcje, ale równie dobrze można ich użyć "na surowo", czy zrobić do nich odwołania z innych funkcji/klas).

konto usunięte

Temat: False Friend Class pattern ;)

Bartłomiej Jończy:
Wydaje mi się, że omawiane funkcjonalności (klasa String) bardziej pasują do StringBuilder (C#/Java). Moim zdaniem, jeśli język nie ma wbudowanej klasy String, to nie ma sensu pakować jej na siłę. Wszystko zależy też od środowiska, w jakim się to wykorzystuje. Kiedy np. większość stringów ląduje w Twig'u, to tam sprawę załatwiają filtry. W Zend_View helpery itd. itp. To, że w PHP dużo rzeczy załatwianych jest funkcjami ma też swoje plusy - pozwala na większą elastyczność przy ich wykorzystaniu (wszak można napisać klasę wykorzystującą funkcje, ale równie dobrze można ich użyć "na surowo", czy zrobić do nich odwołania z innych funkcji/klas).

a jak takie podejście ma się do wydajności?

po ilu warstwach abstrakcji proste hello Word staje się absurdem

Następna dyskusja:

R&OS - class Cezpdf i Cpdf ...




Wyślij zaproszenie do