AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PHP - sind hier "Sicherheitsexperten" an Board?
Thema durchsuchen
Ansicht
Themen-Optionen

PHP - sind hier "Sicherheitsexperten" an Board?

Ein Thema von himitsu · begonnen am 29. Jun 2010 · letzter Beitrag vom 9. Aug 2010
Antwort Antwort
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#1

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 21. Jul 2010, 12:49
Warum nimmst du nicht einfach ein fertiges Framework wie z.B. Zend.
Bei Zend kann man auch nur einzelne Klassen nutzen, wie die ZendDB.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.387 Beiträge
 
Delphi 12 Athens
 
#2

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 21. Jul 2010, 13:09
Hatte damals (ist bestimmt schon 2 Jahre her) mal in Zend reingeguckt ... und dachte das kann man nur komplett nutzen, bzw daß es nicht so einfach wäre, da auch mal nur eine einzelne Klasse rauszunehmen.

nja, muß jetzt nur noch ein paar "Kleinigkeiten" in meinen Basisklassen (also meinem Framework) an die neue DB-Klasse anpassen,
dann fehlt noch die Umstellung der Cache und der Templatte-Klasse, dann das Grundsystem/Framework hoffentlich fertig

Und nebenbei hab ich dadurch auch noch vieles Neues (mehr OOP, Vererbung, Autoloader, PHPDoc) gelernt.

'nen "kleines" Framework, welches mir gefällt und vorallem womit ich auch zurechtkomme fand ich auch nicht.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (21. Jul 2010 um 13:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.387 Beiträge
 
Delphi 12 Athens
 
#3

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 8. Aug 2010, 21:35
Wo jetzt erstmal wieder alles läuft und zusätzlich noch die mysql- und templatte-klassen fertig sind (und hoffentlich auch alles läuft)
und bevor ich mich ans Rechte und Benutzer-System wende, wollte ich mal wieder etwas fragen:


Und zwar hab ich von vielen Klassen deren Namen direkt für die Anbindung an die DB genutzt.
Leider kann man ja nicht von einer Klasse den Namen auslesen.
Der PHP-Parser hat was dagegen, wenn man den Klassennamen direkt als "String" verwenden will, aber diesen nicht schon als String in den Quelltext reinschreibt.
PHP-Quellcode:
class MeineKlasse {
}

echo MeineKlasse;
if (is_subclass_of($obj, MeineKlasse)) ...
Hier meckert er jedenfalls rum.
Zitat:
Notice: Use of undefined constant MeineKlasse - assumed 'MeineKlasse' in ... on line 6
Notice: Use of undefined constant MeineKlasse - assumed 'MeineKlasse' in ... on line 7
Und nein, den Namen als String will ich nicht angeben, denn da fallen Verschreiber nicht immer gleich auf.
Wenn man den Klassennamen nutzen würde, dann könnte eine Meldung ala "unbekannte Klasse" erzeugt werden.

nun war ich erstmal auf diese saublöde Idee (und verwende sie schon eine kleine Weile)
PHP-Quellcode:
class test {
  static function Name()
  {
    return get_called_class();
  }
}

echo test::Name();
leider finde ich das etwas umständlich,
aber immerhin kommt bei einem Verschreiber etwas wie "... besitzt diese Methode nicht"

Nun bin ich vor ein paar Minuten auf diese noch krankere Idee gekommen, hab's ausprobiert und erschreckender Weise scheint es zu funktionieren.
(also, es geht um die Konstante ... das __toString ist nur bei dem Test mit drin)
PHP-Quellcode:
class test {
  function __toString()
  {
    return get_called_class();
  }
}
define('test', 'test');

$test = new test;
if ($test instanceof test) echo 'yes';

echo test;
echo $test;
Wie gesagt, in diesem kleinen Test funktioniert es, auch wenn ich nicht verstehe, wie PHP nun zwischen der Konstannte und der Klasse unterscheidet.


Spricht jetzt irgendwas gegen dieses Vorgehen?
(natürlich würde ich mir diese Konstanten automatisch generieren lassen, um da ebenfalls Verscheiber zu unterbinden)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Aug 2010 um 21:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 8. Aug 2010, 21:49
Leider kann man ja nicht von einer Klasse den Namen auslesen.
Falsch. Ich erwaehne hier einfach mal get_class(). Alternativ gibts auch instanceof.
Der PHP-Parser hat was dagegen, wenn man den Klassennamen direkt als "String" verwenden will, aber diesen nicht schon als String in den Quelltext reinschreibt.
Aus gutem Grund. Das was du im angegebenen Code machst ist eine Konstante namens "MeineKlasse" zu verwenden. Es ist einfach: alles was keine Zahl, kein String-Literal, keine Variable ist in diesem Kontext eine Konstante. Insofern hat der Parser auch recht wenn er dir den Code mit der Notice um die Ohren wirft. Das ist wirklich beschissener Code den du da geschrieben hast.

Und nein, den Namen als String will ich nicht angeben, denn da fallen Verschreiber nicht immer gleich auf.
Wenn man den Klassennamen nutzen würde, dann könnte eine Meldung ala "unbekannte Klasse" erzeugt werden.
Nein, koennte nicht. Schliesslich sieht der eine Konstante die nicht existiert. Ob du MeineKlasse oder MaineKlasse schreibst ist dem Parser scheissegal - es ist immer "Use of undefined constant".

nun war ich erstmal auf diese saublöde Idee (und verwende sie schon eine kleine Weile)
PHP-Quellcode:
class test {
  static function Name()
  {
    return get_called_class();
  }
}

echo test::Name();
leider finde ich das etwas umständlich,
aber immerhin kommt bei einem Verschreiber etwas wie "... besitzt diese Methode nicht"
Aua. Aua. Aua. Aua.

Nun bin ich vor ein paar Minuten auf diese noch krankere Idee gekommen, hab's ausprobiert und erschreckender Weise scheint es zu funktionieren.
PHP-Quellcode:
class test {
  function __toString()
  {
    return get_called_class();
  }
}
define('test', 'test');

$test = new test;
if ($test instanceof test) echo 'yes';

echo test;
echo $test;
Wie gesagt, in diesem kleinen Test funktioniert es, auch wenn ich nicht verstehe, wie PHP nun zwischen der Konstannte und der Klasse unterscheidet.
WTF????????
Du baust dir da ein Konstrukt hin das einfach nur noch bescheuert ist. Also wirklich bescheuert. Erstens solltest du $test mithilfe von new test(); erzeugen. Zweitens, fuehr mal den Code aus:
PHP-Quellcode:
class foo {
}
class bar {
}
define('foo', 'bar');

$test = new foo();
echo get_class($test);
So, und jetzt rate was ausgegeben wird, dann weisst du auch was Vorrang hat: Klassenname oder Konstantenname.
Wenn du direkt im Anschluss diesen Code ausfuehrst:
PHP-Quellcode:
define('foo', 'baz');
$test = new foo();
echo get_class($test);
wirst du feststellen dass beim Instanzieren von Objekten Konstantennamen nicht aufgeloest werden.

Spricht jetzt irgendwas gegen dieses Vorgehen?
(natürlich würde ich mir diese Konstanten automatisch generieren lassen, um da ebenfalls Verscheiber zu unterbinden)
WTF? Du wuerdest dir automatisch Konstanten fuer Klassennamen generieren lassen weil du (verzeih mir meine Wortwahl) zu dumm bist einen Klassennamen fehlerfrei zu tippen? In dem Fall hast du ganz andere Probleme als komischen PHP-Code. Und fuers Protokoll: es sprechen zigtausende Gruende dagegen, solche komischen Eigenheiten von PHP produktiv zu nutzen. Nur weil dich die Autobahnauffahrt nicht daran hindert, gegen die Fahrtrichtung aufzufahren machst dus auch nicht um von A nach B zu kommen, oder?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.387 Beiträge
 
Delphi 12 Athens
 
#5

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 8. Aug 2010, 22:13
auf die Idee bin ich auch schon gekommen und get_class(MeineKlasse) funktioniert nicht

und du weißt garnicht wie oft man sich verschreiben kann
(in Strings gibt's ja nimma 'ne Autovervollständigung)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 9. Aug 2010, 06:27
auf die Idee bin ich auch schon gekommen und get_class(MeineKlasse) funktioniert nicht
Was heisst hier "funktioniert nicht"? Versuchs mal mit get_class($meinObjekt); Und trotzdem, was ist das Problem mit if ($meinObjekt instanceof MeineKlasse) Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.387 Beiträge
 
Delphi 12 Athens
 
#7

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 9. Aug 2010, 06:51
Was heisst hier "funktioniert nicht"? Versuchs mal mit get_class($meinObjekt); Und trotzdem, was ist das Problem mit if ($meinObjekt instanceof MeineKlasse)
In der Klasse kann man z.B. __CLASS__ als String verwenden, um den Klassennamen als Tabellen-/Feldnamen für DB-Anfragen zu nutzen.

Code:
meinObjekt             << Name von Klasse
get_class(meinObjekt)  << Name von Klasse
get_class($meinObjekt) << Name von Objekt
und es kommt natürlich der bekannte Fehler, mit der unbekannten Konstante

Tja, nun hab ich alles nach String umgewandelt und auch denganzen __CLASS__-Schrott rausgemacht,
denn es sieht sch***e aus, wenn an einer Stelle die Klasse und an anderer Stelle einen String genutzt wird.

Ich wollte einfach nur ein einheitliches Aussehn.
> in der Klasse nutzte ich __CLASS__ und self
> und z.B. im Installer wollte ich den Klassennamen direkt angeben.

öfters genutzte DB-Zugriffe und Ähnliches hab ich in Klassen zusammengefaßt
und selten/fast nie genutztes in getrennten Dateien, damit diese nicht ständig mit geladen werden müssen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Aug 2010 um 06:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 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