PHP 7 erschienen!

aaah, daher weht da der wind. also isses wie vermutet, dass dennoch jedesmal eine anfrage gestartet wird, diese aber eben "in groben zügen" schon bekannt ist und das dbms so schlau ist, daraus einen geschwindigkeitsvorteil zu ziehen. sehr interessant. danke für die geduld und aufklärung :D
 
asö! na das is ja dann auch was andres ^^ davon hat aber bisher irgendwie nie einer gesprochen >< also wird diese vorbereitete anfrage schon an die db geschickt und dort wird dann nur noch die gewünschte variable hinzugefügt? hmm, aber dennoch muss die DB bei jeder neuen variable ne neue anfrage intern erstellen, dächt ich. also man spart nen bissl an übertragungs-bandbreite und die db weis eben ganz genau, dass das, was da folgt nur werte sind (was dann wirklich der entscheidende vorteil is). aber direkte performance-zuwächse könnt ich mir gerade dennoch nich vorstellen.

dazu müsste die db ja eine vollständige view der "ungefilterten" (also ohne variable filter) anfrage abspeichern und diese dann je nach variablem filter erneut durchackern (aber eben ein kleiner datenbestand wie die ganze db ^^). dennoch würde man doch aber irgendwann unweigerlich auf veralteten daten arbeiten. eigentlich unvorstellbar, dass das so abläuft.
Performancezuwächse kannst du nur bekommen, wenn du dieselbe Query mehrfach verwendest. Sobald du die Anzahl der Parameter oder deren Typ änderst, brauchst du nämlich eine neue Query und kannst die alte nicht recyclen.

Edit: :-)
 
joa, so langsam durchsteig ichs. also werden qausi die benötigten tabellen usw nicht mehr neu "ausgelesen", das kennt er alles schon. er passt dann nur noch die filter an und rödelt drüber. sehr äh "kindlich" dargestellt ^^
 
Erst einmal beschränkt sich das nur auf die Query. Wenn du eine normale Query an das DBMS übergibts, muss das die ja erst mal parsen, kompilieren und optimieren. Bei Prepared Statements wird quasi das Ergebnis dieser Verarbeitung gespeichert, so dass man die gleiche Query mehrfach ohne ein erneute Verarbeitung ausführen kann. Im Detail ist das natürlich wieder etwas komplizierter aber im Prinzip läuft das so ab.

Edit: Hier gibt es eine brauchbare Erklärung zu dem Thema.
 
Es kommt drauf an, wo man sich bewegt. Im embedded Bereich kann man da sehr viel rausholen. Und es ist dort auch Gang und Gäbe, dass man Object-Code noch mal an zeitkritischen Stellen nochmal überarbeitet. Man verwendet zum Beispiel vermehrt Makros anstelle von Funktionen.

Die Ursprüngliche Aussage war extrem allgemein gehalten. Wenn man diese Aussage nun so stark relativiert, wie in dem zitierten Text, kann ich durchaus zustimmen.

Mit "kein Mensch" meine ich das es einfach kaum verbreitet ist und das ist nun mal Fakt. Im Webbereich dominiert PHP immer noch um Längen.
Unter den 12- bis 18-Jährigen? Ja, da hast du sicher Recht. Liegt wohl nicht zuletzt daran, dass es mit praktisch jedem Hosting-Paket angeboten wird und entsprechend billig zu haben ist.

APS, Coldfusion, Java teilen den kleinen Rest unter sich auf.
Du meinst den "kleinen" Enterpriese-Rest? (APS = ASP.NET?)

Ich persönlich bin leider schon immer Java-Gegner gewesen. Schon bevor ich programmieren konnte.
Diese Aussage disqualifiziert dich eigentlich für jede weitere Diskussion. Du warst also "Gegener" von etwas, das du zu diesem Zeitpunkt weder verstehen noch einschätzen oder vergleichen konntest. Das bedarf eigentlich keines weiteren Kommentars.

Was Sicherheit angeht steht Java auch nicht besser als PHP da. Flash/Java sind eigentlich die Hauptprobleme wenn es um Sicherheitslücken geht.
Wie passen denn nun Flash und Java(-Applets?) ins Bild?

Genau das ist die Mentalität die mir so auf die Nerven geht. Pure Ignoranz.
Dunning-Kruger-Effekt
 
Zuletzt bearbeitet:
Blöde Frage: Man kann mit C++ auch im Web arbeiten (Backend)? Wusste ich noch gar nicht. Bisher war mir das nur von Asp.NET bekannt (Visual Basic, C#).

Klar, warum denn nicht? Sagt Dir cgi (common gateway interface) etwas? Was Du dahinter schnallst, ist völlig egal. Meistens wird hier Perl genommen, aber wir hatten auch schon Projekte, wo C zum Einsatz kam.

aaah, daher weht da der wind. also isses wie vermutet, dass dennoch jedesmal eine anfrage gestartet wird, diese aber eben "in groben zügen" schon bekannt ist und das dbms so schlau ist, daraus einen geschwindigkeitsvorteil zu ziehen. sehr interessant. danke für die geduld und aufklärung :D

Ich erkläre es Dir mal, wie es in Oracle passiert. Wie es andere machen, keine Ahnung.

Also, unser Statement: select * from kunde where name = ?; (ich habe extra den Namen genommen, weil es dann vielleicht deutlicher wird). Das '?' ist hierbei eine Bindvariable. Also, das SQL kommt an, der Optimizer schaut es sich an, parst es (hard + soft), optimiert es (ca 50.000 mal) und legt das Statement im Cache ab. WICHTIG: Der Wert der Variable wird nicht berücksichtigt! Jetzt führst Du dasselbe Statement noch mal aus, Optimizer merkt, dass genau dieses Statement schon im Cache liegt und nicht geparst und optimiert werden muss. Also, wird das Statement aus dem Cache genommen und ausgeführt.

Jetzt setzt Du die Bedienung direkt in das SQL rein: select * from kunde where name = 'Müller'; und führst es aus. Das Statement wird geparst (hard + soft), optimiert (ca 50.000mal), im Cache abgelegt und dann ausgeführt. Jetzt führst Du das SQL nochmal aus, aber anstelle von Müller schreibst Du Schulze rein. Für den Optimizer ist das zweite Statement wieder ein Neues, obwohl es sich ja nur der Filter geändert hat. Also beginnt das Spiel wieder von vorne. Das ist der Unterschied zwischen "Bindvariablen" und "Literalen". Wenn Interesse besteht, kann ich es Dir noch genauer erklären.
 
Unter den 12- bis 18-Jährigen? Ja, da hast du sicher Recht. Liegt wohl nicht zuletzt daran, dass es mit praktisch jedem Hosting-Paket angeboten wird und entsprechend billig zu haben ist. Du meinst den "kleinen" Enterpriese-Rest? (APS = ASP.NET?)

Usage Statistics and Market Share of Server-side Programming Languages for Websites, December 2015
TIOBE Software: The Coding Standards Company
https://de.wikipedia.org/wiki/PHP (siehe Punkt Verbreitung)
PHP just grows & grows | Netcraft
Historical trends in the usage of server-side programming languages, December 2015
http://githut.info/

Nur weil die großen auf bestimmte Technologie setzten, bedeutet es immer noch nicht das es die Mehrheit ist. Ob Forum, Blog, Wiki oder Onlineshop und was es noch alles so gibt. Hinter denen steckt fast immer PHP. Warum meinst du den gibt es so viele günstige Hosting Angebote für PHP ? Angebot und Nachfrage.

Diese Aussage disqualifiziert dich eigentlich für jede weitere Diskussion. Du warst also "Gegener" von etwas, das du zu diesem Zeitpunkt weder verstehen noch einschätzen oder vergleichen konntest. Das bedarf eigentlich keines weiteren Kommentars.

Ich habe es einfach nicht gemocht und möglichst gemieden. Wortwahl war vielleicht nicht die beste. Das hatte ich aber bereits klargestellt.

Wie passen denn nun Flash und Java(-Applets?) ins Bild?

PHP wird als Sicherheitsproblem dargestellt. Bei Java und anderen Sprachen (Flash) gibt es aber auch einige Probleme.


Dir ist schon bewusst das es dann wohl auch auf dich zutrifft ? Immerhin willst du ja nicht akzeptieren das PHP Marktführer ist.
 
Zuletzt bearbeitet von einem Moderator:
aaah, daher weht da der wind. also isses wie vermutet, dass dennoch jedesmal eine anfrage gestartet wird, diese aber eben "in groben zügen" schon bekannt ist und das dbms so schlau ist, daraus einen geschwindigkeitsvorteil zu ziehen. sehr interessant. danke für die geduld und aufklärung :D
Naja der Geschwindigkeitsvporteil ist ja nur bedingt da. Es kommt, wenn man die SQL-Statements richtig ausformt selten dazu, das ein und das selbe Statement verwendet werden muss. Du darfst nicht vergessen, das gerade bei PHP die Datenbankverbindungen bei jeden Request wieder geschlossen werden und dadurch die Informationen verfallen.

Das wichtigste bei Prepared-Statements ist einfach der, das unser SQL-Statement getrennt von den Werten vorkompilliert werden, wodurch SQL-Anweisungen in den übergebenen Werten ungültig werden.

Um das mal zu verdeutlichen:
PHP:
$sql = "SELECT * FROM accounts WHERE password=";
$sql .= $_POST["password"]; // Übergabe von "0 or 1=1". Die hintere or-Anweisung wird auch ausgeführt

So mit Prepared-Statement:
PHP:
$sql = "SELECT * FROM accounts WHERE password=:pwstr";
$stmt = $db_pdo->prepare($sql);
// Das obere Statement wird kompilliert. Nehmen wir mal an, es wird in Token übersetzt (was nicht der realität entspricht, aber so ist es verständlicher):
// T_SELECT "*" T_FROM "accounts" T_WHERE "password" T_COMP T_VARIABLE:pwstr

$stmt->execute(array( ":pwstr" => $_POST["password"] )); 
// Übergabe von "0 or 1=1". Die hintere or-Anweisung wird nicht ausgeführt. Der Interpreter versteht es in dem Stadium nicht
// Es wird sowas draus gemacht: T_SELECT "*" T_FROM "accounts" T_WHERE "password" T_COMP "0 or 1=1"
// Das Gleichheitszeichen müsste zum T_COMP werden und das or zum T_OR. Außerdem müsste die Anweisung in 3 Strings zerlegt werden.
Da aber Prepared nicht so arbeitet, wie ich es demonstriert habe, sondern deutlich effektiver, muss man für die Datenbank selbst kein Escaping der Werte mehr vornehmen. Denn SQL-Anweisungen werden innerhalb des kompilierten Statements nicht mehr verstanden, da diese Werte ausschließlich auch als solche erwartet und behandelt werden.

Und was die ganzen anderen hier betrifft, die sich wegen der Sprache den Kopf einschlagen. Ich frage mich echt, was der ganze Kram soll. PHP ist in sehr vielen Dingen einfach freier. In PHP kann man objektorientiert, prozedural oder in beidem arbeiten. Was für den einen ein schlechter Programmierstil ist, ist für andere eine ebenfalls funktionierende kreative Lösung. Und wer PHP nicht leiden kann, soll es einfach meiden. Ich arbeite jetzt schon seit etwa 10 Jahren mit PHP und es ist für mich bis heute noch die einzige Sprache für das Web, die mir auch beim programmieren Spaß macht. Mir macht es keinen Spaß, bei den Versuch, Probleme zu lösen ständig auf irgendwelche Debugger-/Compiler-Fehler zu treffen, weil die blöde Sprache mir vorkauen muss, wie ich ein Problem zu lösen habe. Wenn das ganze so weitergeht und die Sprachen noch strikter werden, brauch man dem Computer bald nur noch sagen, was man benötigt und er erzeugt den Code von alleine nach ISO- und DIN-Norm. Ob man das dann von Hand Tippt oder der Computer die Lösung generiert. Es würde bis auf die Bezeichner eh alles gleich aussehen.

Ich schweinere in Codes sogar sehr gerne rum. Ich tue alles, um Overheads zu minimieren. Am Ende muss das Ergebnis nur stimmen und es sollte sicher sein. Die Verantwortung dafür hat der Programmierer und nicht die Entwickler einer Programmiersprache. Diese muss nur Grundlegend sicher sein. Sie kann aber nicht für die Unsicherheit verantwortlich sein, die ein Programmierer in seine Software integriert hat!

Jetzt mit PHP 7 habe ich alle Singletons durch anonyme Klassen ersetzt. Callbacks werden fast nur noch mit anonymen Funktionen erstellt. Der Umfang an externen Hilfsbibliotheken ging dabei rapide zurück. Auch der neue Null-Coalescing Operator ?? findet aktuell regen Einsatz. Ich habe mit PHP meinen Spaß. Und egal ob VB.NET, Python oder Java. Mit alle diesen Sprachen will ich einfach im Web nicht arbeiten. Selbst für den Desktop habe ich mir andere Alternativen gesucht, anstatt diese Dinger zu benutzen. Das ist mir auch völlig schnuppe, ob Java, C#, VB.NET und Konsorten vor allem im Business-Bereich am weitesten verbreitet sind. Jeder soll sich da seinen eigenen Weg suchen. Aber je mehr mir eine Sprache eine feste Arbeitsweise aufdrängen will oder sogar strikt einfordert, um so unsymparischer ist mir die Sprache bzw. dessen Debugger/Compiler/Interpreter. Ich hätte gerne in den ersten 2 Jahrzehnten des Computerzeitalters schon gelebt, wo damals die ganz großen der Szene mit "Schweinecode" noch das Computerzeitalter mitgeformt haben. Heute fehlt dem ganzen einfach die Seele. Aber wie ich schon gesagt habe. Das soll jeder für sich selbst entscheiden.

Viele Argumente sind vielleicht richtig. Aber diskutiiert bitte differenzierter. Denn nicht alle teilen eure Meinung und wenn jemand denkt, auf Grund einer Aussage diese Person für dieses Thema gänzlich zu disqualifizieren, dann ist das sein Bier. Aber denkt bitte daran, das eine solch entsprechende Aussage beleidigend ist. Nehmt eure Nasen bitte wieder runter!
 
Wenn also eine Sprache von Dir sowas

Code:
private static Integer i = 10;
anstelle von
Code:
$i = 10;
// dann kann ich ja auch sowas machen:
$i = "ich bin ein string...";
// geile Sache, eine und dieselbe Variable als ein Integer und dann auch als String. Ade Datentypisierung!

einfordert, ist sie Dir unsympathisch?

Sorry, aber das kann ich nicht nachvollziehen geschweige denn gutheißen. Jeder hat seinen Programmierstil und das soll auch so sein, aber es gibt sowas wie "wartbarer Code" und da sind solche Späße wie "rumschweinern im Code" schlicht und ergreifend verboten. Ich rede vom Business-Bereich, was man auf seinem eigenen PC macht, ist schnurz.

Und zum Thema "Codegenerierung": sowas gibt es schon und wird in manchen Bereichen der Softwareentwicklung sogar vorausgesetzt ;)

PHP hat seine Vorteile und Daseinsberechtigung, absolut, das will ich nicht abstreiten.
 
Zuletzt bearbeitet:
Bitte, er hat doch klargestellt, dass er sich vom "Business-Bereich" nicht bevormunden lassen will. Ein Freigeist muss auch mal "rumschweinern" dürfen, um sein Genie zum Ausdruck zu bringen. Wartbarkeit ist etwas für Amateure, nichts für Leute, die seit zehn Jahren mit PHP arbeiten. Und überhaupt, durch das Wegfallen des Compile-Schrittes erspart man sich Unmengen von potentiellen Fehlern und kann sich auf Laufzeitfehler konzentrieren, falls denn überhaupt welche auftreten sollten (die man bemerkt). Jetzt bitte keine Argumente mehr gegen PHP anführen oder gar alternative Sprachen vorschlagen, sonst wächst seine Abneigung nur noch mehr an.
 
Sehr sehr geil :lol:

Du bist schuld, dass ich jetzt vom Lachen noch mehr Ohrenschmerzen habe (hatte am Montag eine Ohren-OP) :(
 
Wenn also eine Sprache von Dir sowas

Code:
private static Integer i = 10;
anstelle von
Code:
$i = 10;
// dann kann ich ja auch sowas machen:
$i = "ich bin ein string...";
// geile Sache, eine und dieselbe Variable als ein Integer und dann auch als String. Ade Datentypisierung!

einfordert, ist sie Dir unsympathisch?

Sorry, aber das kann ich nicht nachvollziehen geschweige denn gutheißen. Jeder hat seinen Programmierstil und das soll auch so sein, aber es gibt sowas wie "wartbarer Code" und da sind solche Späße wie "rumschweinern im Code" schlicht und ergreifend verboten. Ich rede vom Business-Bereich, was man auf seinem eigenen PC macht, ist schnurz.

Und zum Thema "Codegenerierung": sowas gibt es schon und wird in manchen Bereichen der Softwareentwicklung sogar vorausgesetzt ;)

PHP hat seine Vorteile und Daseinsberechtigung, absolut, das will ich nicht abstreiten.

Naja, ich glaube aber, dass es is PHP nicht so schlimm wie in JS ist :ugly:
B9B7qbVIcAAV4cp.jpg
 
Ist ja mehr oder weniger dasselbe, ich kann ja auch $i = '10' schreiben und habe meinen String. :D

Einfach nur grausam.
 
Ist ja mehr oder weniger dasselbe, ich kann ja auch $i = '10' schreiben und habe meinen String. :D

Einfach nur grausam.

Ging mir eher um die interne Handhabung vom PHP mit der Typeninkonsistenz.
Also ob PHP aus '10' + 2 nun 12, '12', '102' oder 102 macht, oder einfach ein Fehler ausgibt.

Das habe ich bisher noch nie getestet, werde ich aber vermutlich nochmal machen, dieses Wochenende. ;)
Aber wir schweifen ziemlich stark vom Thema ab. ;)
 
Bitte schön:

Code:
<?php

$i = 10;

echo $i;

echo "<br><br>";

$i = '10';

echo $i;
echo "<br><br>";

$i = '10' + 2;

echo $i;
echo "<br><br>";

$i = '10' + '2';

echo $i;
?>

Und was er ausgibt:


Man sieht natürlich nicht ob, es sich um einen String oder Int handelt.
 
Ganz im Ernst, wenn "10"+2 überhaupt ausgeführt wird, ist das für mich ein ziemliches Manko. Und wenn aus "10"+"2" 12 wird (String + String = Int), dann ist das doch ein schönes Beispiel für alles, was an dieser Sprache verkehrt ist...

Mein Lieblingslink zu diesem Thema:
PHP: a fractal of badÂ*design / fuzzy notepad

Folgendes Verhalten würde ich übrigens von einer Programmiersprache erwarten, und siehe da wer liefert...

Code:
>>> [COLOR="#008000"]"10"+2
[COLOR="#FF0000"]Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    "10"+2
TypeError: Can't convert 'int' object to str implicitly

Code:
>>> 2+[COLOR="#008000"]"10"[COLOR="#FF0000"]Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    2+"10"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Code:
>>> [COLOR="#008000"]"10"+[COLOR="#4B0082"]str(2)
[COLOR="#0000FF"]'102'

Code:
>>> [COLOR="#4B0082"]int([COLOR="#008000"]"10")+2
[COLOR="#0000FF"]12
 
Zurück