PHP-Umfrage



  • hmm - seit ich python kann hab ich fast keine probleme mehr mit webapps ( da alle python libs die ich benutze implizit für sicherheit sorgen, und selbst mit extensiven tests kaum noch löcher probleme auftauchen)

    damals als ich mal php gelernt hatte weil alle das taten endete man immer mit nem arsch voll problemen

    btw - fals es mal flott sein muss - haskell, erlang und lisp (evtl sogar .net) sind hervoragend geeigent um sichere flotte apps zu machen

    der riesenvorteil all dieser lösungen - man muss nicht um eingebaute sicherheitslöcher drumrumarbeiten, und die sprachen nicht nicht aus kommerzgründen kastriert (zend engine verkaufsargumente)



  • Mr. N schrieb:

    DEvent schrieb:

    Aber hier gehts ja um PHP. Also ich finde PHP5 ist super als Sprache. In PHP5 wurde OOP weitaus besser umgesetzt als C++, Java oder C#.

    Das ist jetzt irgendwie... unerwartet. Begründe das doch bitte. 🙂

    Du nimmst mir die Worte aus dem Mund 😉 Bei C++ kann ich es mir (noch) an diversen Stellen vorstellen, aber bei Java und C#? never...



  • Was mich an PHP wirklich nervt, ist, dass so etwas nicht geht:

    $myVariable = myFunction($someVariable)[$someIndex];
    

    Abgesehen davon fände ich Type Hints sinnvoll ("richtige" Type Hints, nicht dieser Spielkram mit ausschließlich Arrays und Objekten, wie es ihn bisher gibt).
    Zudem sollten sich die Entwickler endlich einmal einigen, welche Notationen sie denn nun verwenden wollen. str_replace() und __toString() passen semantisch nicht wirklich zusammen ...
    Und die Unicodeunterstützung ist ein Graus ...

    Trotzdem kann man mit PHP gut arbeiten, sofern man das Groß der zahlreichen "Problematiken" einmal verinnerlicht hat.



  • árn[y]ék schrieb:

    Zudem sollten sich die Entwickler endlich einmal einigen, welche Notationen sie denn nun verwenden wollen. str_replace() und __toString() passen semantisch nicht wirklich zusammen ...

    PHP erhebt überhaupt nicht den anspruch, mit einem akademisch korrekten sprachdesign zu glänzen. es soll in der praxis einfach viel bringen, viele features und so...

    árn[y]ék schrieb:

    Trotzdem kann man mit PHP gut arbeiten, sofern man das Groß der zahlreichen "Problematiken" einmal verinnerlicht hat

    genau so ist es 👍



  • [quote="árn[y]ék"]Was mich an PHP wirklich nervt, ist, dass so etwas nicht geht:

    $myVariable = myFunction($someVariable)[$someIndex];
    

    quote]

    Mir stinkt auch wenn ich hunger hab, das mir meine Internetseite die mittels php geschrieben wurde nicht den Grill anwirft und paar steaks für mich brutzelt! 😮



  • pale dog schrieb:

    PHP erhebt überhaupt nicht den anspruch, mit einem akademisch korrekten sprachdesign zu glänzen. es soll in der praxis einfach viel bringen, viele features und so...

    Sicherlich richtig. Dennoch würde eine einheitlichere Benennung meiner Meinung nach die Intuitivität steigern. Dabei ist mir aber natürlich bewusst, dass dies aus Abwärtskompatibilitätsgründen schlecht machbar ist. Andererseits gehen die PHP-Entwickler aber ohnehin gerade dazu über, viele "Altlasten" kompatibilitätsbrechend abzuwerfen. So sollten z.B. die Parameter zahlreicher str_*()-Funktionen in ihrer Reihenfolge angeglichen werden; ob und wie dies nun realisiert wurde oder wird, weiß ich allerdings nicht so genau.

    VergissEs schrieb:

    Mir stinkt auch wenn ich hunger hab, das mir meine Internetseite die mittels php geschrieben wurde nicht den Grill anwirft und paar steaks für mich brutzelt! 😮

    Abgesehen davon, dass ich auch gerne eine solche Internetseite hätte - Nenne mir einen rationalen Grund, warum dies

    $myVariable = myFunction($someVariable)[$someIndex];
    

    nicht gehen soll, und ich hingegen gezwungen bin, eine Zwischenvariable zu deklarieren:

    $tmpVar = myFunction($someVariable);
    $myVariable = $tmpVar[$someIndex];
    unset($tmpVar);
    


  • Mr. N schrieb:

    DEvent schrieb:

    Aber hier gehts ja um PHP. Also ich finde PHP5 ist super als Sprache. In PHP5 wurde OOP weitaus besser umgesetzt als C++, Java oder C#.

    Das ist jetzt irgendwie... unerwartet. Begründe das doch bitte. 🙂

    In PHP5 gibts die __call, __get und __set Methoden. Dadurch kann man das Delegator-Pattern weitaus einfacher implementieren:

    class ClassOneDelegator {
        private $targets;
        function __construct() {
            $this->target[] = new ClassOne();
        }
        function addObject($obj) {
            $this->target[] = $obj;
        }
        function __call($name, $args) {
            foreach ($this->target as $obj) {
                $r = new ReflectionClass($obj);
                if ($method = $r->getMethod($name)) {
                    if ($method->isPublic() && !$method->isAbstract()) {
                        return $method->invoke($obj, $args);
                    }
                }
            }
        }
    }
    

    Die Reflexion-API ist weitaus einfacher als in Java und C#. Dynamische Typen sind auch recht praktisch. Das einzige was ich in PHP vermisse sind namespaces. Arrays und Maps sind auch besser, intuitiver als in Java/C#.

    Mit PHP hats mir Spass gemacht zu programmieren, die Sprache macht es einem so einfach wie möglich. Man braucht auch nicht ständig an irgendwelche Pakete zu denken, die man einbinden muss. Ein einfaches strpos() oder fopen() reicht ohne ein include blub oder require foo zu schreiben. Der Nachteil ist eben, dass viele Namen belegt sind und es ist nicht immer klar welche schon belegt sind. Deswegen wären namespaces wirklich gut.



  • @DEvent: Schau dir doch mal Smalltalk / Ruby / Lisp an.



  • Mr. N schrieb:

    @DEvent: Schau dir doch mal Smalltalk / Ruby / Lisp an.

    Mein Problem ist, dass wenn ich kein Problem habe oder kein Projekt grade eine Sprache benötigt, ich keinen Grund habe diese Sprachen mehr als nur oberflächlich zu erkunden. Ich schau mir dann Smalltalk / Ruby / Lisp an, denke "ja das sieht alles schön aus" und lege es wieder mit einem Schulterzucken in die Ecke. Ausserdem habe ich PHP5 mit C++, Java und C# verglichen.

    Für Ruby sehe ich eine Chance, weil RonR gibt, aber versuch mal einen Webserver mit RonR zu finden.



  • kann z.B. meiner einfach so

    aber im gegensatz zu den meisten 08/15 developern ohne sicherheitsverständniss bin ich auch dazu bereit für meinen webspace zu zahlen, nur um eine sichere umgebung zu haben

    php ist da kein bestandteil, und wird nie einer sein



  • DEvent schrieb:

    Mr. N schrieb:

    DEvent schrieb:

    Aber hier gehts ja um PHP. Also ich finde PHP5 ist super als Sprache. In PHP5 wurde OOP weitaus besser umgesetzt als C++, Java oder C#.

    Das ist jetzt irgendwie... unerwartet. Begründe das doch bitte. 🙂

    In PHP5 gibts die __call, __get und __set Methoden. Dadurch kann man das Delegator-Pattern weitaus einfacher implementieren:

    class ClassOneDelegator {
        private $targets;
        function __construct() {
            $this->target[] = new ClassOne();
        }
        function addObject($obj) {
            $this->target[] = $obj;
        }
        function __call($name, $args) {
            foreach ($this->target as $obj) {
                $r = new ReflectionClass($obj);
                if ($method = $r->getMethod($name)) {
                    if ($method->isPublic() && !$method->isAbstract()) {
                        return $method->invoke($obj, $args);
                    }
                }
            }
        }
    }
    

    Die Reflexion-API ist weitaus einfacher als in Java und C#. Dynamische Typen sind auch recht praktisch. Das einzige was ich in PHP vermisse sind namespaces. Arrays und Maps sind auch besser, intuitiver als in Java/C#.

    Mit PHP hats mir Spass gemacht zu programmieren, die Sprache macht es einem so einfach wie möglich. Man braucht auch nicht ständig an irgendwelche Pakete zu denken, die man einbinden muss. Ein einfaches strpos() oder fopen() reicht ohne ein include blub oder require foo zu schreiben. Der Nachteil ist eben, dass viele Namen belegt sind und es ist nicht immer klar welche schon belegt sind. Deswegen wären namespaces wirklich gut.

    // ungetestet
    import java.lang.reflect.Method;
    
    import net.sf.cglib.proxy.Enhancer;
    import net.sf.cglib.proxy.MethodInterceptor;
    import net.sf.cglib.proxy.MethodProxy;
    
    /// ...
    
    public static <T> T createDelegator(Class<T> superclass, final Object delegate) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(superclass);
        enhancer.setCallback(
            new MethodInterceptor() {
                public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) 
                        throws Throwable {
                    return method.invoke(delegate, args);
                }
            }
        );
    
        return (T) enhancer.create();
    }
    

    Ich seh schon, wie viel einfacher es doch in PHP ist ... 🙄





  • import net.sf.cglib.proxy.Enhancer; 
    import net.sf.cglib.proxy.MethodInterceptor; 
    import net.sf.cglib.proxy.MethodProxy;
    

    Welche Bibliothek ist das, cglib? Die kannte ich noch nicht.

    Und kann man jetzt einfach

    delegator = new ClassOneDelegator();
    delegator.irgend_eine_methode_die_niergens_in_ClassOneDelegator_auftaucht(foo, blaa);
    delegator.irgend_ein_attribut_der_niergens_in_ClassOneDelegator_auftaucht = blaa;
    

    schreiben?



  • rüdiger schrieb:

    Nur mal um zu zeigen, das Sicherheitslücken durch PHP real sind:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-184769.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-183935.html

    Was hat das mit Php-Fehlern zu tun? Das erste ist eine mySQL-Injektion und beim zweiten wurde der Server gehackt. Dies könnte mit jeder anderen Sprache auch passieren, wer mySQL-Befehle ohne überprüfung/maskierung ausführt ist halt selber schuld.

    PHP hat aber schon sehr viel Balast von älteren Versionen. Ist ja mit C++ genauso. Vielleicht wäre es besser einen Bruch zu machen zwischen Php4 und Php5, und so die Web-Entwickler zu ihrem Glück zwingen.



  • dann kann man auch gleich eines der genialen frameworks in ruby oder python nehmen

    die sind flotter als php und für die gewöhnlichen 08/15 seiten muss man keine zeile sql schreiben, injections werden automatisch verhindert, und man hat eine sauere trennung von modellen, opertationen und darstellung

    warum also php noch ändern - einfach nur was einsetzen, das nicht mist ist



  • DEvent schrieb:

    Ist ja mit C++ genauso.

    Ich höre wesentlich seltener von sicherheitskritischen Bugs in GCC, glibc und libstdc++ als in PHP. Also nein, ist nicht genauso.





  • r0nny schrieb:

    dann kann man auch gleich eines der genialen frameworks in ruby oder python nehmen

    die sind flotter als php und für die gewöhnlichen 08/15 seiten muss man keine zeile sql schreiben, injections werden automatisch verhindert, und man hat eine sauere trennung von modellen, opertationen und darstellung

    warum also php noch ändern - einfach nur was einsetzen, das nicht mist ist

    Soweit ich weiß, ist Ruby (On Rails) aber wesentlich langsamer als PHP und auch wesentlich RAM-& CPU-intensiver.
    Ohne FastCGI (oder so ähnlich?) soll da nix gehen, ausprobiert hab ichs aber noch nicht 🤡



  • DEvent schrieb:

    import net.sf.cglib.proxy.Enhancer; 
    import net.sf.cglib.proxy.MethodInterceptor; 
    import net.sf.cglib.proxy.MethodProxy;
    

    Welche Bibliothek ist das, cglib? Die kannte ich noch nicht.

    Und kann man jetzt einfach

    delegator = new ClassOneDelegator();
    delegator.irgend_eine_methode_die_niergens_in_ClassOneDelegator_auftaucht(foo, blaa);
    delegator.irgend_ein_attribut_der_niergens_in_ClassOneDelegator_auftaucht = blaa;
    

    schreiben?

    Das kann man halt in der Hinsicht schlecht mit der PHP Version vergleichen, da in Wirklichkeit eine neue Klasse erstellt wird mit der gegebenen Superklasse. Insofern sind die Methoden sowieso schon definiert, eben von der Superklasse. Überschreiben kann man sie eben mit dem MethodInterceptor mit dem man den Methoden-Aufruf weiterdelegieren kann. Wenn man nicht will, dass eine Subklasse erstellt wird, muss eben eine Schnittstelle einführen, die dann implementiert wird.



  • Der Durchschnitt schrieb:

    da in Wirklichkeit eine neue Klasse erstellt wird mit der gegebenen Superklasse

    Wie lange dauert das? Gregor hat mal erzählt, dass ein Aufruf der Compiler-API 900 Millisekunden gedauert hat, was ganz klar unakzeptabel langsam ist.


Anmelden zum Antworten