Snippets - Diskussionsthread

Worum geht's denn? Für mich sind Snippets eher kleine Codeschnippsel, Funktionen oder Ansätze, die für sich zwar komplex sein können, wo man aber nicht erst zig Minuten braucht, um zu verstehen, was nun eigentlich wo und warum passiert.

Als Beispiel wäre ein 20-Zeiler, der ein Bild stumpf (also ohne Schnickschnack) in ASCII umrechnet durchaus für mich noch ein Snippet. Ein 50-Zeiler, der das MD5-Hashen implementiert aber schon nicht mehr - obwohl er nixdestotrotz bestimmt interesserant wär. Und btw: kein Plan, ob das in 50 Zeilen überhaupt geht. War nur ein Beispiel. Bevor hier noch 'ne Diskussion losgeht... ;)
 
bei dem Snippet für den Alterscheck würde ich folgendes vorschlagen:
1. anpassen das man die einzelnen teile als array übergibt oder so wie es auf dem perso steht, aber das ist ja nicht hund und nicht katze
2. noch dazuschreiben, dass diese funktion alleine nicht mehr nach gerichtsurteilen für einen alterscheck ausreichend ist, da man diese auch leicht selbst erzeugen kann
 
1. anpassen das man die einzelnen teile als array übergibt oder so wie es auf dem perso steht, aber das ist ja nicht hund und nicht katze
2. noch dazuschreiben, dass diese funktion alleine nicht mehr nach gerichtsurteilen für einen alterscheck ausreichend ist, da man diese auch leicht selbst erzeugen kann

Punkt 2:
Eingefügt + link zum nachlesen ^^

Punkt 1:
Ist doch eigentlich wurst ob es als Array oder so übergeben wird :)
Beim aufruf der Funktion kann man die Personalausweisnummer ja auch mit einem Formular oder sonstigem einzeiln übergeben...

PHP:
$f1 = Feld 1;
$f1 = Feld 2;
$f1 = Feld 3;
$f1 = Feld 4;
check_age_by_perso($f1.' '.$f2.' '.$f3.' '.$f4)
 
klar kann man es so machen, aber nen bissel unnütz, wieso arrays als string übergeben um dann wieder die einzelnen teile zu splitten?^^
 
hehe, muss mal auch was zu dem Code vom gott theHacker loslassen^^

warum bitte schön nicht:
PHP:
function mydate($format,$time=time())
{

statt:
PHP:
function mydate($format,$time="")
{
  if($time=="") $time=time();

nur so als vorschlag^^

in PHP fehlt echt das überladen von Methoden :biggrin:
 
Der Grund ist vermutlich ganz einfach - Du kannst im Funktionsheader keine Funktion aufrufen.

Ich persönlich finde es nur immer etwas unschick, quasi den nicht gesetzten Zustand einer Variable durch einen leeren String abzubilden. Wozu gibt's denn null? Und nun kommt mir nicht mit "PHP ist typenlos". ;)
 
@ice-breaker:
Ich habe es vor dem Posten extra nochmal probiert, aber es geht leider nicht.
Ich persönlich finde es nur immer etwas unschick, quasi den nicht gesetzten Zustand einer Variable durch einen leeren String abzubilden. Wozu gibt's denn null?
0 wollte ich nicht nehmen, weil es ein gültiger Timestamp ist.
Mit null selber hab ich noch nicht so viele Erfahrungen gesammelt, drum muss ich vorsichtshalber mal fragen:
Müsste ich dann entweder mit ===null oder mit is_null() testen, korrekt ?
 
Code:
[FONT=Courier New][COLOR=#ff8000]/** 
* Ersetzt bestimmte Zeichen durch ihre XML-Entitäten 
* 
* @param String $string Die Zeichenkette, in der die Entitäten ersetzt werden sollen 
* @return String Der bearbeitete String 
*/ 

[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]function [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]xmlentities[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]([/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]$string[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]) { 
  return [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]str_replace [/COLOR][/FONT][FONT=Courier New][COLOR=#007700](array([/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'&'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'"'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]"'"[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'<'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'>'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]), array([/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'&'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'"'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'&apos;'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'<'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700], [/COLOR][/FONT][FONT=Courier New][COLOR=#dd0000]'>'[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]), [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]$string[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]); 
}[/COLOR][/FONT]
Überseh ich was ? ... htmlspecialchars() ? ;)
 
Nee, Du übersiehst nichts, aber ich brauchte für 'ne spezielle Anwendung noch mehr Sachen, die kodiert werden sollten, daher hab ich das auf diesem Wege gemacht. Aber im Allgemeinen haste recht, ja... ;)
 
Ich persönlich tendiere zu ===.
Hätt ich eh, wollte nur sichergehen, dass ich das auch richtig mach :)

Ich habs jetzt geändert und auch noch eine kleine Optimierung eingebaut, da viele Ersetzungen ja auf sich selbst ersetzt haben, was ja unnötig ist. Klick

Mein Benchmark liefert mir:
Starte Vorgang:
Mache 50000 Durchläufe.

Starte langsame mydate():
Dauer: 12,804928 s

Starte schnelle mydate():
Dauer: 12,223703 s
 
Falls Du noch ein kleines bisschen optimieren willst, return doch gleich und speicher nicht erst noch zwischen. ;)
 
Falls Du noch ein kleines bisschen optimieren willst, return doch gleich und speicher nicht erst noch zwischen. ;)
Hab ich gemacht und ich hab auch noch die eine if()+Zuweisung durch nur ternärer Operator ersetzt.
Theoretisch müsste ich da ja auch sparen, weil manchmal eine Zuweisung wegfällt.

An Benchmarks kann mans aber nicht wirklich ablesen, ob/was besser is.
 
hmm, also ich denke mal diese nano-sekunden unterschied verkraften alle server schon, ich würde mir da um solche sachen keine gedanken machen, ich denke aber trotzdem das nen array mit dne keys von 1-12 und als wert den namen des monats schneller wären^^
 
[...]ich denke aber trotzdem das nen array mit dne keys von 1-12 und als wert den namen des monats schneller wären^^
Wie meinst'd ? :think:
Es geht ja um ne date()-Funktion, die auch deutsch arbeitet.

Und im Formatstring nach 'D', 'F', 'l' und 'M' suchen zu lassen, Formatstring ersetzen lassen durch die numerischen Wochentage bzw. Monate und diese dann als Schlüssel mit einem Array zu verwenden, dürfte wohl wesentlich aufwendiger sein.
 
Wie meinst'd ? :think:
Es geht ja um ne date()-Funktion, die auch deutsch arbeitet.

Und im Formatstring nach 'D', 'F', 'l' und 'M' suchen zu lassen, Formatstring ersetzen lassen durch die numerischen Wochentage bzw. Monate und diese dann als Schlüssel mit einem Array zu verwenden, dürfte wohl wesentlich aufwendiger sein.

hmm, hast recht
 
PHP:
SELECT INET_NTOA(ip) FROM table WHERE 1
ACHTUNG: diese funktion existiert nicht unter windows!!
Negativ ! INET_NTOA() und INET_ATON() funktionieren auch unter Windows. Zumindest haben sies bei mir seit Jahren immer getan ;)

@MrToiz:
Oops, hab ich gar nicht gelesen :oops: Werd ich bei Gelegenheit mal testen, ob ein static noch was zusätzlich an Geschwindigkeit bringt.
 
zu den mysql regeln... der insert set syntax gehört zwar nicht zum ansi standard ist aber eine nette sache, solang man nur mysql einsetzt. es ist bedeutent übersichtlicher

PHP:
INSERT INTO
	daten
SET
	name = '$_INPUT[name]',
	vorname = '$_INPUT[vorname]',
	strasse = '$_INPUT[strasse]',
	ort = '$_INPUT[ort]',
	plz = '$_INPUT[plz]',
	land = '$_INPUT[land]',
	tel = '$_INPUT[tel]',
	tel2 = '$_INPUT[tel2]',
	fax = '$_INPUT[fax]',
	vtyp = 234,
	ztyp = 345,
	added = NOW(),
	update = NOW(),
	ip = '{$user->IP}',
	pwd_hash = MD5('$key$salt'),
	user_info_1 = '$info1',
	user_info_2 = '$info2',
	user_info_3 = '$info3',
	user_info_4 = '$info4'

zu schrebien als
PHP:
INSERT INTO
	daten (name, vorname, strasse, ort, plz, land, tel, tel2, fax, vtyp, ztyp, added, update, ip, pwd_hash, user_info_1, user_info_2, user_info_3, user_info_4)
VALUES
	($_INPUT[name]', '$_INPUT[vorname]', '$_INPUT[strasse]', '$_INPUT[ort]', '$_INPUT[plz]', '$_INPUT[land]', '$_INPUT[tel]', '$_INPUT[tel2]', '$_INPUT[fax]', 234, 345, NOW(), NOW(), '{$user->IP}', MD5('$key$salt'), user_info_1 = '$info1', '$info2',  '$info3', '$info4')

das sind ist jetzt nur ein rein fikitves beispiel... aber man sieht was ich meine. und der ist eigentlich noch harmlos hab schon bessere gesehen. dann entfern mal nen feld oder füg mal eins in der mitte hinzu. warum in der mitte, weil es ist übersichtlicher wenn man die feld reihnfolge wie in der datenbank hat... dann brauch man sich nicht wundern warum das ding nicht das macht was man will, aber auch kein wunder wenn das feld gleich 3 mal in einem query gesetzt wird. :ugly: und noch was schönes an dem syntax ist man kann den query kopieren und als update verwenden...

und zum * thema... dort wo es sinnvoll ist spricht nix dagegen es einzusetzen, aber nur weil man zufaul ist die felder aufzuschrebien sollte man es natürlich nicht verwenden.