php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 31-01-2008, 00:29
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard [PHP5] Eigene Sriptsprache...

Guten Morgen alle zusammen,

Ich vermute mal, dass ich mich mit meinem Wissen etwas zu weit vor wage aber ein kleiner "einfacher" Versuch kann nicht schaden...

Eine Idee, die mir schon seit längerem im Kopf rumschwirrt, ist eine "kleine" eigene Scriptsprache, die ich in meinem eigenen System gern anwenden würde. Kleines Beispiel:

Die Menüpunkte meines Hauptmenüs kommen zB. aus der DB.
Für jeden Punkt habe ich eine Spalte "ONCLICK", in die ich meine Aktion schreiben will. Eine solche Aktion sieht "derzeit" ganz easy zB. so aus.

newWindow( 100, 100 );
oder
link( ordner/main.php?test=1 );

Ich denke diese Befehle sagen schon aus, was passieren soll oder?
Jetzt komme ich natürlich und denke mir... hey... machst dir "einfach" ne schöne Liste an solchen Befehlen in einer Klasse. ( jeder Befehl zb. ne Methode mit Rückgabewert etc.... ). Okay... bei solch einer recht statischen Sache geht das alles noch. Was aber, wenn man gern sowas machen will:

newWindow( breite(), 200 );
oder
link ( this.main.php?test=$var} );

... Wie ihr seht wäre es natürlich cool, wenn man alles so schön verschachteln kann, wie man es so mal eben von PHP und anderen Sprachen kennt. Mal eben eine Variable in einen String einsetzen lassen etc... oder eine Funktion als Wert in einer anderen nutzen etc.... na ihr wisst schon.

Will ich zu viel oder gibts vielleicht einen Weg, wie ich sowas evtl. etwas einfacher selbst schreiben kann? Ich suche nur Tipps oder Gedanken.... keine Lösungen... schreiben will ich schön selbst.

gruß Mario
Mit Zitat antworten
  #2 (permalink)  
Alt 31-01-2008, 00:46
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: [PHP5] Eigene Sriptsprache...

Zitat:
Original geschrieben von GELight
Kleines Beispiel:

Die Menüpunkte meines Hauptmenüs kommen zB. aus der DB.
Für jeden Punkt habe ich eine Spalte "ONCLICK", in die ich meine Aktion schreiben will. Eine solche Aktion sieht "derzeit" ganz easy zB. so aus.

newWindow( 100, 100 );
oder
link( ordner/main.php?test=1 );
Ich bin mir nicht sicher, ob ich dein Beispiel richtig verstanden habe, aber was soll die Scriptsprache bezwecken, das PHP nicht besser könnte? Beispielsweise durch (Helper-)Funktionen?

Du solltest dir zuallerst über folgendes im Klaren sein:
Eine eigene "Scriptsprache" zu schreiben ist sehr kompliziert. Einen gescheiten Parser zu basteln ist meiner Meinung nach eine ordentliche Herausforderung, auch wenn ich diesen Themenbereich selbst sehr interessant finde. Für einen Einblick in die Komplexität wirds Typo3s TypoScript-Parser tun, denke ich.
Und das ist noch nicht alles. Deine Scriptsprache hätte noch einen Nachteil: die Performance.

Grüße

Geändert von Griecherus (31-01-2008 um 00:52 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 31-01-2008, 01:21
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Dieser Ansatz scheint mir sehr unflexibel zu sein, teilweise spürst du das ja bereits.

Man kommt ja öfter mal in die Verlegenheit, Funktionalitäten an DB-Items zu koppeln. Dein Menü mit onClick-Events ist da ein gutes Beispiel.
Ich bevorzuge bei sowas immer die Standardlösung: Callbacks.
Meine DB für ein Menü sähe etwa so aus:
Code:
menu(id, parent, child, name, path, callback, arguments, ...)
-------------------------------------------------------------
1, 0, 0, 'Home', '/',         NULL,        NULL;
2, 1, 0, 'News', '/news.php', 'newWindow', 'a:2:{i:100;i:100;}';
3, 1, 1, 'Poll', '#',         'newWindow', 'a:1:{s:9:"/poll.php";}';
Die ersten 3 Spalten ermöglichen Hierarchien (Nested Set). Wer es nicht braucht, kann parent und child weglassen.
name ist das innerHTML des generierten a-Tags und path ist der Wert des href-Parameters, z.B. <a href="/">Home</a>. Natürlich kann man auch HTML-Code in name hinterlegen und somit z.B. Bilder verlinken (grafisches Menü).
Die Spalten callback und arguments werden beim Rendern des jeweiligen Links in einen PHP-Funktionsaufruf mit entsprechenden Argumenten umgesetzt.
PHP-Code:
while ($item db_fetch_assoc($resultset)) {
    if (
$item->callback) {
        
$item->arguments $item->arguments unserialze($item->arguments) : array();
        
$item->extra call_user_func_array($item->callback$item->arguments);
    }
    
//...

Die Callback-Funktion generiert das gewünschte Javascript, HTML oder was auch immer.
Wenn man oo programmiert, ist der Callback natürlich eine Methode der Menu-Renderer-Klasse.

Das ist nur ein einfaches Beispiel. Man kann es beliebig erweitern. Ich würde z.B. im DB-Design noch zwischen HTML-Argumenten und Callback-Argumenten unterscheiden und das Array für die Callback-Argumente so strukturieren, dass man einzelnen Einträgen ansehen kann, dass sie server- oder clientseitig evaluiert werden sollen.
Nur eines würde ich lassen: Callback-Argumente sollten niemals selbst wieder Callbacks sein. Damit kommst du in Teufels Küche und kein Debugger kann dir mehr helfen.
Mit Zitat antworten
  #4 (permalink)  
Alt 31-01-2008, 08:33
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard [PHP5] Scriptsprache

Guten Morgen,

Also ich dank euch erstmal für eure Meinungen und Erfahrungen diesbezüglich. Mir war schon irgendwie klar, dass sowas nicht ohne wäre. Bei den echten Sprachen steckt da ja oft die übelste Compliertechnik etc. dahinter... vondaher meinte ich auch, dass es erstmal nur Gedanken sind. Ich glaube ich versuche meine eigene kleine Variante so weiter zu fahren, wie ich angefangen habe.
Einfach eine Liste an Methoden, die mit bestimmten Befehlen aufgerufen werden und diese einfach nur in echte JavascriptBefehle oder Links umwandeln. Sehr viel mehr braucht man ja meist eh nicht.

Ohne das ich gleich den nächsten neuen Post aufmachen will, hätte ich gleich noch eine Frage bezüglich dem serialisieren.
Kurz und knapp: Spricht etwas dagegen, ein erzeugtes "object" zu serialisieren und in der DB oder Session zu speichern? ( zb: um dieses wieder auf die nächste Seite zu bringen. Am meisten habe ich immer damit zu kämpfen, wie ich meine Daten so zur nächsten Seite bekomme, dass es auch noch relativ sicher bleibt. Hab ja nur GET, POST und die Session zur Verfügung ( cookies hab ich noch nicht so verwendet )

Also was würde für sowas und was gegen sowas sprechen?

Dank euch... Mario
Mit Zitat antworten
  #5 (permalink)  
Alt 31-01-2008, 09:56
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Gegen die Ablage in der Datenbank spricht meistens die Normalisierung, für spricht das Caching. Du musst halt abwägen, wie du damit umgehst. Es ist zum Beispiel super dreckig, ein serialisiertes Array der IDs deiner User auf der Freundschaftsliste direkt in der User-Tabelle abzulegen.
Ich weiß auch nicht, ob ich mit dem arguments-Feld so arbeiten würde wie onemorenerd das macht. Aus Normalisierungssicht wäre eine zweite Tabelle angebrachter oder ich würde eine kommaseparierte Liste verwenden. Aber ein serialisiertes Array ist im PhpMyAdmin etwas ekelig zu editieren...
Mit Zitat antworten
  #6 (permalink)  
Alt 31-01-2008, 12:53
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Serialisierte Array in DBs wiedersprechen schon der ersten Normalform. Von daher braucht es SEHR gute Gründe, um sowas zu tun.

Und bei dem Menubeispiel, sehe ich den Grund nicht.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #7 (permalink)  
Alt 31-01-2008, 13:13
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

db4o
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #8 (permalink)  
Alt 31-01-2008, 22:20
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Das soll nicht 1.NF sein? Das sehe ich aber anders!
Arguments ist ein String, also ein atomares Attribut. Der Inhalt dieser Strings ist aus DB-Sicht völlig belanglos. Das Attribut wird niemals als Selektions- oder Joinkriterium benutzt. Es ist einfach nur ein Anhängsel ... könnte ebensogut ein MD5-Hash sein.
Mit Zitat antworten
  #9 (permalink)  
Alt 31-01-2008, 22:47
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wenn du es als einen Wert siehst, gut...
Aber es ist doch nur ein String, weil du das Array nicht anders da rein bekommst.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #10 (permalink)  
Alt 31-01-2008, 23:29
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Arguments ist ein String, also ein atomares Attribut.
Naja, es ist schon ein Array, sonst macht der Aufruf mit call_user_func_array wenig Sinn. Als 100%ig Normalisiert würde ich die Tabelle nicht bezeichnen, würde es in diesem Falle aber zulassen!
Mit Zitat antworten
  #11 (permalink)  
Alt 01-02-2008, 10:32
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Combie, PHP-Desaster, ihr habt mich nicht verstanden.

Ihr schaut durch die PHP-Brille auf die Attributwerte, seht serialisierte Arrays und sagt "das hat Struktur, das muß normalisiert werden".

1. Da liegt ihr falsch, es hat keine Struktur. Ich habe nämlich semantisch definiert, dass es keine hat.
2. Selbst wenn es Struktur hätte, wäre das kein Verstoß gegen die 1.NF. Es wäre erst dann kein atomares Attribut mehr, wenn ich mehrere serialisierte Variablen in einem Feld speichern würde, also z.B. "'i:100','i:100'".


Übrigens habt ihr beide bestimmt schon mal eine DB entworfen, in der URIs gespeichert wurden. Für Zugriffsstatistiken oder was auch immer. Dabei habt ihr die URI sicher komplett in eine Spalte gepumpt.

stats (id, uri) = {(1, 'http://example.com/foo/bar.html?x=1&y=2')}

Setzt ihr jetzt die RFC-2396-Brille auf und sagt "URIs sind strukturiert, das muß normalisiert werden"?
Mit Zitat antworten
  #12 (permalink)  
Alt 01-02-2008, 10:48
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ok, du hast schon recht, du hast es ja als String definiert. Können wir uns drauf einigen
Mit Zitat antworten
  #13 (permalink)  
Alt 01-02-2008, 12:43
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Du hast jetzt gute Gründe genannt, warum es keinen Schaden anrichtet. Aber leider noch keine, warum es notwendig ist es so abzuhandeln.....

Ich möchte nur zu bedenken geben, dass man sich damit einige Möglichkeiten verbaut. Ich weiß, dass du Ahnung hast. Aber ich habe schon dutzende von Abfängern in vergleichbare Fallen tappen sehen.

Irgendwann könnten solche Fragen auftauchen:
  • Gib mich alle Fenster, die in der Linken oberen Ecke entstehen
  • Gib mich alle Fenster, die poll.php benutzen
  • Ruckel bitte alle Fenster 10px nach links
Sorry, aber das sind so Probleme, die mir beim betrachten einer solchen Lösung sofort ins Auge springen. Was zum großen Teil daran liegt, dass ich auch schon in solche Fallen tappen durfte.
Konkreter: Ja, es ist durchaus möglich, dass sich das Anforderungsprofil einer Applikation nach der Entwurfsphase noch ändert. Und sei es erst nach Jahren.

Betrachte meine Einwände bitte nicht so sehr als Kritik dir gegenüber, sondern mehr als Warnung für Anfänger.
__________________
Wir werden alle sterben

Geändert von combie (01-02-2008 um 12:48 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 01-02-2008, 17:52
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Oh keine Sorge, ich fühle mich nicht angegriffen.
Zitat:
Du hast jetzt gute Gründe genannt, warum es keinen Schaden anrichtet. Aber leider noch keine, warum es notwendig ist es so abzuhandeln.....
Mein Vorschlag ist nicht notwendig, aber das ausnormalisieren ebenfalls nicht. In dieser Hinsicht gibt es also keine "bessere" Lösung.
Meine ist aber performanter. Ich brauche keine JOINs.
Zitat:
Irgendwann könnten solche Fragen auftauchen:

* Gib mich alle Fenster, die in der Linken oberen Ecke entstehen
* Gib mich alle Fenster, die poll.php benutzen
* Ruckel bitte alle Fenster 10px nach links
Wie ich schon sagte, soll mein Beispiel nur den Ansatz verdeutlichen. Tatsächlich würde ich es so implementieren, dass ich in arguments nur Arrays mit benannten Indizes speichere. Dann kann man solche Fragen auch einigermaßen performant beantworten.

Diese Queries beziehen sich jetzt auf das Beispiel von oben ohne Indizes:
SELECT * FROM table WHERE arguments LIKE 'i:100;i:100;'
SELECT * FROM table WHERE arguments LIKE 's:9:"/poll.php";'
Die 3. Frage währe ein Update mit Where-Klausel ähnlich dem ersten Select. Allerdings könnte man das auch prima in die Callback-Funktion integrieren.
Mit Zitat antworten
  #15 (permalink)  
Alt 01-02-2008, 17:57
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
  • Gib mich alle Fenster, die in der Linken oberen Ecke entstehen
  • Gib mich alle Fenster, die poll.php benutzen
  • Ruckel bitte alle Fenster 10px nach links
Sorry, aber das sind so Probleme, die mir beim betrachten einer solchen Lösung sofort ins Auge springen.
OffTopic:
ja, da springt einem das "mich" in der tat ins auge
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:10 Uhr.