![]() |
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Zitat:
|
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Guck dir mal die
![]() BTW (auch @Mithrandir): ich kann hier nur die Verwendung eines ORM (wie z.B. Doctrine) empfehlen. Greetz alcaeus |
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Zitat:
Auf der anderen Seite könnte ich mir aber auch vorstellen, dass symfony einiges vereinfachen könnte. Hab mir mal das Tutorial mit der Job-Website durchgelesen. Grob erinnert mich so ein PHP-Framework an die VCL in Delphi. |
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Der Vorteil von Doctrine? Nu ja, nehmen wir an du hast eine Tabelle "Student" mit folgenden Spalten: id, lastname, firstname, birthday, matr.
Du hast entsprechend eine Klasse "Student" mit den Properties id, lastname, firstname, birthday, matr. Jedesmal wenn du Daten aus der Datenbank holst, werden automatisch die Objekte erzeugt, so dass du direkt damit arbeiten kannst:
PHP-Quellcode:
Das ist jetzt ein etwas stupides Beispiel, aber der Vorteil ist ganz eindeutig: jeder Datenbankzeile wird automatisch eine Objektinstanz zugewiesen.
$student = Doctrine::getTable('Student')->findOneById($studentId);
if (!$student) { // ... } $student->notifyAboutExams(); Zusaetzlich gibts dann noch Plugins (Behaviors), welche dir Aufgaben abnehmen, z.B. das automatische Befuellen von Create- und Update-Timestamps, Soft-Delete, I18N (so dass du z.B. eine Kategorie hast, den Titel aber in beliebig viele Sprachen hinterlegst), uvm. Zusammen mit Symfony kommt dann hinzu, dass dir diese Model-Klassen automatisch generiert werden, genauso wie die Formulare zur Datenmanipulation. Du hast also sehr schnell dein Skeleton anhand dessen du die Applikation zusammenbaust. Ist ein sehr interessanter Ansatz ;) Greetz alcaeus |
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Ok, das klingt wirklich nicht schlecht. Ich werde wohl erstmal bei meinem alten System bleiben, mir aber in den kommenden Monaten mal Doctrine/Symfony genauer angucken. Danke für die Erklärung. :)
|
AW: PHP - sind hier "Sicherheitsexperten" an Board?
eigentlich 'ne recht nette Sache
Code:
schon hätte man einen Miniatur-Autoloader für ein kleines Projekt
function loadClass($name) {
// zum Schutz, damit man hier kein Sicherheitsloch reinbekommt $name = str_replace(array('/', '\\', ':'), '_', $name); if ((($file = __DIR__ . "/includes/$name.inc.php") && file_exists($file)) || (($file = __DIR__ . "/includes/$name.php") && file_exists($file))) require_once $file; } spl_autoload_register('LoadClass'), true); nun nur noch alle Klassen nach /includes/ , jeweils in eine Datei mit dem Namen {Klassenname}.php und schon kann man sich alle include/require sparen. |
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Moin,
Zitat:
PHP-Quellcode:
class Foo\Bar { }
PHP-Quellcode:
class Foo/Bar { }
PHP-Quellcode:
Ersteres ist unter PHP 5.3 eine Namespace-Definition, da ist die Ersetzung echt doof (wobei ich jetzt auch keine Zeit habe zu gucken, was da dem Autoloader uebergeben wird). Alles andere wird dir der Parser wieder rueckwaerts an Kopf werfen, entsprechend kannst du die Ersetzung auch rauswerfen. Schliesslich ist da ja nichts drin was User-generated ist. Falls doch, zurueck an den Planungstisch und das Anwendungskonzept neu erstellen.
class Foo:Bar { }
Ich empfehle uebrigens das Zend-Naming-Scheme: <NS>_Class_Where_Parts_Represent_Folders. Vom include_path ausgehend wuerde er die Klasse in <NS>\Class\Where\Parts\Represent\Folders.php suchen. <NS> ist dabei dein "Namespace" (nicht zu verwechseln mit echten Namespaces). Der wurde eingefuehrt um Kollisionen zu vermeiden, wie z.B. zwischen dem heutigen Zend_Date (frueher nur "Date") und der PHP-Standard-Klasse Date. Bei dir koennte es z.B. FNSE_Controller_Abstract heissen. Greetz alcaeus PS: mit User-generated meine ich bspw. sowas:
PHP-Quellcode:
$foo = $_GET['foo'];
$bar = new $foo(); |
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Hmmmm, an den Namespace hatte ich garnicht gedacht, also daß man den auch da mit angeben kann. :wall:
Aber ich hatte irgendwo gelesen, daß z.B. bei einem direkten Aufruf von spl_autoload_call oder eben deinem
Delphi-Quellcode:
, vorallem in Verbindung mit Usereingaben, da auch "Verzeichnisse" mit übergeben werden könnten.
new $foo();
Was "Probleme" bereiten würde, wenn man aus dem Klassennamen einen Dateinamen zusammenbastelt. Nja, und darum wollte ich verhindern, daß hier Verzeichnissangaben im Klassennamen enthalten sind. :stupid: [edit] Grade ausprobiert ... gibt keine Probleme mit Namespace :angel2:
Code:
und bei
function LoadClass($Class) {
echo $Class . '<br>'; } spl_autoload_register('LoadClass', true); $X = new Foo/Bar();
Delphi-Quellcode:
kommt es zu einem Parse-Error.
$X = new Foo:Bar();
|
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Ich fasse zusammen:
PHP-Quellcode:
gibt
class Foo\Bar {}
Zitat:
PHP-Quellcode:
gibt
class Foo:Bar {}
Zitat:
PHP-Quellcode:
gibt
class Foo/Bar {}
Zitat:
Das heisst, du solltest wirklich nichts ersetzen, denn den Namespace kannst du (wenn richtig gemacht) direkt mit nem ".php" am Ende versorgen und dann nen file_exists() machen. Zitat:
Greetz alcaeus |
AW: PHP - sind hier "Sicherheitsexperten" an Board?
Was mir grad so auffällt ...
Wenn RegExen doch sooooo böse sind und möglichst vermieden werden sollen, dann darf man auch keine RewriteEngine verwenden, denn dieses Ding ist ja bis zum Rand damit vollgestopft. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz