Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Glupie/smieszne Bledy Oo W Php5
e-Gandalf
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


przyklady:

1)

  1. <?php
  2.  
  3. class Foo {
  4. }
  5.  
  6. function x(Foo $e) {
  7. }
  8.  
  9. $l = new Foo();
  10.  
  11. x((int)$l);
  12.  
  13. ?>


2)

  1. <?php
  2.  
  3. class Foo {
  4. }
  5.  
  6. function x(Foo $e) {
  7. }
  8.  
  9. x(null);
  10.  
  11. ?>


macie inne? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
hawk
post
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Zapomniałeś o:
  1. <?php
  2.  
  3. class Foo {
  4. }
  5.  
  6. $foo = new Foo();
  7. $foo->bar = 1;
  8. echo $foo->bar;
  9.  
  10. ?>

(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
chfast
post
Post #3





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(e-Gandalf @ 2004-09-07 11:34:45)
2)

  1. <?php
  2.  
  3. class Foo {
  4. }
  5.  
  6. function x(Foo $e) {
  7. }
  8.  
  9. x(null);
  10.  
  11. ?>

A co w tym jest takiego dziwnego?

  1. <?php
  2.  $integer = (int) $object;
  3. ?>
Ten kod wcale nie zamienia objektu na integer. Obiekt pozostaje obiektem. Nie wiem co jest odpowiednikiem objektu w liczbach całkowitych (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ale jakaś cyferka powinna się pojawić.
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


1) A moze to, ze w kazdym jezyku swiata kazdy nieprymitywny obiekt (non-primitive object) moze byc dereferencowany (nie wiem jak to tlumaczyc... dereferenced (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) do nulla? A PHP5 nie pozwala na to?

Dokladnie wycofano do w po php 5 RC3 po JEDNYM mailu jednego z programistow ktory napisal, ze jest to zadko uzywane, a sprawia problemu :/

2) Ja nie proboje zmienic typu, ja przekazuje obiekt zdereferencowany do inta (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A on to olewa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
chfast
post
Post #5





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Niestety niewiele z tego rozumiem bo nie mam pojęcia, co to znaczy ze obiekt jest 'dereferenced'.
Go to the top of the page
+Quote Post
hawk
post
Post #6





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Pomijając derefencowanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) chodzi o to że:

1) W każdym normalnym języku obiektowym null można wstawić wszędzie, bo to pusta referencja do obiektu. Np (java):
Kod
Integer i = null

A w php nie. Null nie działa.

2) Rzutowanie obiektu na int jest bez sensu, ale php na to pozwala, a potem olewa całe rzutowanie i robi po swojemu.

Ledwo wydali PHP5 a już wypadałoby zrobić poprawki w silniku...
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Hawk: no dokladnie o to mi chodzilo (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Dabroz
post
Post #8





Grupa: Zarejestrowani
Postów: 286
Pomógł: 0
Dołączył: 1.11.2003
Skąd: Poland, Płock

Ostrzeżenie: (0%)
-----


Szkoda że nie ma typów danych w php. Można by tworzyć takie cuda jak w C++:

Kod
int a=5;
a.~int();


(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

[edit]

W sumie można to zrobić jeszcze bardziej chamsko (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Kod
4.~int();


(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Dabroz 15.09.2004, 16:18:56
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


jedziemy dalej:

  1. <?php
  2.  
  3. class Foo {
  4. private $password='pass1';
  5. }
  6.  
  7. $foo = new Foo();
  8.  
  9. print_r($foo);
  10.  
  11. ?>


Jak mozna sie latwo domyslic, jest to pierwsza metoda ktorej bym sie imal gdybym mial napisac np. exploita w formie pluginu do jakiegos CMSa, ktory by przechwytywal hasla. buforuje output, wpisuje print_r() przechwytuje regexpem haslo i kasuje bufor. Sliczne. Gratuluje Panom z php.
Go to the top of the page
+Quote Post
hawk
post
Post #10





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Komedii ciąg dalszy:

  1. <?php
  2.  
  3. class Foo {
  4.     private $var;
  5.  
  6.     function __get($sName) {
  7.         return $this->var;
  8.     }
  9.  
  10.     function __set($sName, $mValue) {
  11.         $this->var = $mValue;
  12.     }
  13. }
  14.  
  15. $foo = new Foo();
  16. $foo->bar = &#092;"some text\";
  17. var_dump(empty($foo->bar)); //wynik: true
  18.  
  19. ?>

(IMG:http://forum.php.pl/style_emoticons/default/wacko.gif)

@Gandalf:
Nie potrzeba nawet buforować...
  1. <?php
  2. file_put_contents(&#092;"ftp://user:password@example.com/pub/file.txt\", serialize($objectWithPrivateVars));
  3. ?>
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


poprawcie jesli sie myle, ale to chyba tez blad:

  1. <?php
  2.  
  3. class Ble {
  4. protected static $ble=1;
  5. }
  6.  
  7. class Ble2 extends Ble {
  8. public function foo () {
  9. print parent::$ble;
  10. }
  11. }
  12.  
  13. $x = new Ble2();
  14.  
  15. $x->foo();
  16.  
  17. ?>


smieszne, nie?
Go to the top of the page
+Quote Post
hawk
post
Post #12





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Dlaczego żenada? Mechanizm jest chyba zrobiony tak, jak powinien być zrobiony. No chyba że kryją się w tym kolejne błędy?
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No, tu niestety ponosimy koszty "kompatybilnosci wstecz". php 5 obsluguje wyjatki, ale samo z nich nie korzysta, wiec otrzymujemy dualnosc jezyka. Nasza funkcja parseFile, fajnie, wywali wyjatek, ale juz fopen() wywali error, a nie wyjatek i oleje nasze try{}. Wyjsciem ktory stosuje w Thotcie jest @. if (!@fopen()) throw new IOException('Could not open file');
Go to the top of the page
+Quote Post
hawk
post
Post #14





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Typowy problem języków proceduralno-obiektowych. Tak samo jest np. w C++ i tego nie da się uniknąć. Java to inna sprawa, bo język był obiektowy od samego początku, i ta obiektowość jest "wbudowana" bardzo głęboko. php i C++ - już nie.
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(serafin @ 2004-09-22 13:28:33)
Skoro ten IOException i tak bedzie prowadzil do wyswietlenia informacji i zakonczenia pracy aplikacji moglbys rownie dobrze wrzucic ten msg do exit() a wynik bylby podobny...

Nic mnie nie obchodzi jako autora API co bedzie robil coder z wyjatkiem. On ma go sobie oprogramowac tak jak mu sie podoba. Wazne, ze zwracam mu wyjatek.
Narzut czasowy jest smiesznie niski, bo choc oczywiscie mozemy sie bawic w dyskusje, na czym tracimy ta jedna tysieczna sekundy, to i tak uwazam, ze lepiej to miec i ulatwic czyste programowanie, niz zyskac jedna tysieczna i miec syf.
A potem i tak to jest cachowane (wiekszosc) wiec znika obciazenie, za to o ilez ladniej sie kod pisze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A co do Javy - pewnie, ze my tu charujemy, zeby wymyslic cos fajnego z PHP5, nikt nie dyskutuje, ze Java jest lepsza jako jezyk programistyczny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Tylko, ze w Javie juz wszystko bylo, a php to strasznie nieodkryte poletko, i mozna sie pobawic w innowacyjnosc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
hawk
post
Post #16





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Co prowadzi nas do wniosku że każdą funkcję powinno się dokumentować. Wniosek oczywisty, nawet bez wyjątków i @throws w phpdoc. Oczywiście analizowanie funkcji nie wchodzi w grę.

A co do throws w Javie, to ma to też wady i zdania są, hmm, podzielone. Główna wada była taka, że wyjątek propagował się w górę i to samo działo się z throws, które trzeba było dopisywać do metod które same by tego wyjątku nie rzucały. Skutek: nagromadzenie throws, próby obsługi wyjątku w metodach które nie mają co z nim zrobić lub dziedziczenie z RuntimeException. Chociaż mi throws za bardzo nie przeszkadzało więc rozważania są dosyć akademickie. W każdym razie, zawsze są zady i walety (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
netzah
post
Post #17





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 19.03.2004

Ostrzeżenie: (0%)
-----


Cytat(e-Gandalf @ 2004-09-15 16:42:40)
  1. <?php
  2.  
  3. class Foo {
  4. private $password='pass1';
  5. }
  6.  
  7. $foo = new Foo();
  8.  
  9. print_r($foo);
  10.  
  11. ?>


Jak mozna sie latwo domyslic, jest to pierwsza metoda ktorej bym sie imal gdybym mial napisac np. exploita w formie pluginu do jakiegos CMSa, ktory by przechwytywal hasla.

Od kiedy "private" to nie metoda za zapewnianie bezpieczenstwa? Chodzi tu przeciez o wymuszenie na osobach korzystajacych z danych klas uzywania odpowiednich metod zamiast mieszania w zmiennych.
Rownie dobrze moglbym napisac, ze mozna napisac exploita w formie pluginu, ktory zrobi echo $password, bo ktos w tej zmiennej trzyma haslo. Jezeli ma sie system pluginow, trzeba uwazac jakie zmienne przekazuje sie do modulow.
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #18





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Poczekaj, poczekaj. Jesli bym chcial zablokowac mieszanie, to wystarczloby odebrac mozliwosc edycji wlasciwosci. Pole typu private blokuje do niego dostep. I to jest cel (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A to, ze nagle mozna sie do tego pola dostac, to juz cos imho jest nie tak...
Go to the top of the page
+Quote Post
hawk
post
Post #19





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


1) Taki swodobny dostęp do zmiennych jest rzeczą nietypową. W Javie jest interfejs Serializable i wszystko co z niego dziedziczy można zrzucić do stringa, a potem podejrzeć zawartość. Ale trzeba samemu napisać to implements Serializable.

2) php nie posiada w zasadzie debuggera (no są wyjątki), więc tradycyjnie debuguje się skrypty za pomocą var_dump (fuuuuuj). Debugger musi mieć pełny dostęp do wszystkiego, więc i var_dump musi mieć taki dostęp. Nie da rady inaczej.

3) W php na szczęście ten problem jest mniej dotkliwy, bo i język jest specyficzny. Taki, rzekłbym, chałupniczy. W php nie ma np. żadnego RMI, RPC, CORBY, COM, blah, blah. W php jak piszesz skrypt to jesteś panem i władcą swojego poletka. Nie ma żadnych bibliotek zewnętrznych do których masz tylko interfejs. Nie ma w ogóle zdalnego wywoływania/przekazywania obiektów. Więc małe jest zagrożenie, że autor skryptu musi posługiwać się obiektem, który został stworzony gdzieś indziej.
Go to the top of the page
+Quote Post
netzah
post
Post #20





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 19.03.2004

Ostrzeżenie: (0%)
-----


Cytat(e-Gandalf @ 2004-09-30 21:18:27)
Poczekaj, poczekaj. Jesli bym chcial zablokowac mieszanie, to wystarczloby odebrac mozliwosc edycji wlasciwosci. Pole typu private blokuje do niego dostep. I to jest cel (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A to, ze nagle mozna sie do tego pola dostac, to juz cos imho jest nie tak...

Mozna sie dostac do private - nie do konca. Mozna tylko zobaczyc jego wartosc, a i to nie bezposrednio ale przez var_dump itp. Jezeli chodzi o zalozenia private, to uwazam, ze jest OK - nikt chyba, majac obiekt z prywatnymi polami, nie bedzie badac efektow var_dump itp. zamiast uzyc odpowiednich metod dostarczanych przez obiekt. I tak, jak napisal hawk: var_dump, to php-owy debug, kto z Was go czasem nie uzywa? Ulatwia to zycie i wg mnie bezpieczenstwo na tym nie cierpi.


@hawk:
Interfejs Serializable: Jak mogloby to zostac przeniesione do php, zeby nie naruszac zgodnosci z php < 5? Potrzebna bylaby mozliwosc blokowania funkcji serialize() dla wybranych klas, ale wg mnie to zbedne kombinacje, z ktorych nie byloby wielkich korzysci, bo tak jak napisales - zagroznia sa tutaj znikome.
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 10:38