Um es kurz zu machen: Ich persönlich mag PHP einfach nicht (und halte es auch für einen ziemlichen Schrotthaufen).
Warum? Namespaces seit noch nicht so langer Zeit, horizontale Vererbung erst mit 5.4, nach wie vor ein unsagbar inkonsistenter monolithischer Sprachkern (haystack <-> needle) und immer wieder in den Schlagzeilen mit
ziemlich peinlichen Sicherheitslücken. Nachdem die Sprache anscheinend von Analphabeten "konzipiert" wurde, haben nun wohl C-Dilletanten das Ruder in der Hand.
Dazu ist die Syntax hässlich wie die Nacht (wird nur noch von Javascript getoppt) und umständlich zu tippen (Klammern, Curly Brackets, Semikolons <- alles Pflicht).
Und wenn ich mir diese Quotes ansehe, wundert mich gar nichts:
http://en.wikiquote.org/wiki/Rasmus_Lerdorf
Ich mache das nun schon ein paar Jahre und muss meinem Kram erledigt so erledigt bekommen, dass er mir 3 jahre später nicht um die Ohren fliegt bzw. Geld verdienen. Ich bin deswegen vor längerer Zeit dazu übergegangen, meine "Werkzeuge" in Frage zu stellen. Kernfrage war dabei: Warum benutze ich das und komme ich damit effektiv zum Ziel? Mit PHP war ich nie so richtig warm und "bauchgefühlt" fand ich das Arbeiten damit auch nicht so toll/effektiv.
Für die Webentwicklung ist Rails m. E. nach mit das Beste, womit man im Moment entwickeln kann. In dem Ding stecken so viele schlaue Gedanken, die ziemlich viel von dem abdecken, was im Web wichtig ist: Migrationen für die DB Evolution, automatisches Deployment, Testgetriebene Entwicklung, Asset Pipeline, REST als Architekturstil. Daneben schreibt man mit 1-3 Zeilen simpelstem Code komplexe Queries für DB Abfragen. Wenn man aus der PHP Ecke kommt, weiss man von solchen Dingen gar nichts, hat man sie einmal benutzt, will man das nicht mehr hergeben.
Daran war ich halt interessiert und Ruby ist die Sprache, in der Rails geschrieben ist. Ich habe mich vor Rails ca. 1 Jahr mit Ruby beschäftigt und finde sie toll: Die Objektorientierung, die Konsistenz, die Standardbibliothek, die tollen Gems, die Möglichkeiten: Das Killerfeature für mich ist immer wieder die Metaprogrammierung in Ruby und nur deswegen ist Rails Rails.
CakePHP ist ja an Rails angelehnt, aber dadurch, dass PHP __NICHTS__ bzgl. Metaprogrammierung kann (z. B. Klassen zur Laufzeit wiedereröffnen und und Methoden erweitern), kann man Rails auch nicht in PHP nachbauen.
Was auch interessant ist: Rails ist bei den Standardsachen (CRUD) deutlich schneller als alle anderen PHP Frameworks und CMS, die ich in den Fingern hatte. Rails spuckt z. T. die HTTP Responses in deutlich unter 50 ms aus - das habe ich mit keinem PHP Framework gehabt.
Und... Ruby weiss nichts vom Web, ist also eine echte All-Purpose Sprache. Ich nutze sie noch für die Linux Systemadministration und in Zukunft für iOS Programmierung (mit Rhodes).
Letzendlich ist es aber so, dass man mit den verfügbaren Skriptsprachen (Perl, Python, PHP, Ruby) generell die meisten Probleme gelöst bekommt. Wenn man damit intensiver arbeitet/arbeiten muss, sollte man halt mal nach dem "wie" fragen. Die Lernkurve für Ruby/Rails ist in jedem Fall steil, das ist nix für "ich schaue es mir mal nebenbei an".
Ruby ein besseres Sicherheitskonzept hat und die Syntax wohl einfacher ist
Das Sicherheitskonzept wird immer vom Programmierer vorgegeben, gerade bei Webanwendungen. Die Syntax einfacher... hmm, auf jeden Fall einfacher zu tippen und zu lesen.
Code:
# ruby code, my_array ist eine lokale var
# die vom typ "Array" ist
# in Ruby ist übrigens ALLES ein Objekt
# es gibt keine Skalare
# selbst 1 (oder 10) ist ein Objekt der Klasse "Integer"
my_array.each do |element|
print element
end
# ======== PHP ===========
# das ist das PHP Analogon dazu
# ich finde das Geklammere mittlerweile lästig
# Semikolon auch
# das vergesse ich oft, wenn ich von Ruby wieder
# zu PHP wechsele
foreach ($my_array as $element)
{
echo $element;
}
# =====================
# =====================
# und hier mal ein conditional
# unless ist Negierung, also ! in PHP
# Übersetzung: schreibe 'array has elements' wenn my_array nicht leer ist
print 'array has elements' unless my_array.empty?
# ======== PHP ===========
if (count($my_array) > 0)
{
echo 'array has elements';
}
# oder als ternärop als Einzeiler
# den finde ich aber auch wieder recht sperrig
# beim lesen
echo count($my_array) > 0 ? 'array has elements' : '';