WinFuture-Forum.de: Php Klassen Und Funktionsnamen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Php Klassen Und Funktionsnamen Case Sensitive?


#1 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

  geschrieben 16. Mai 2007 - 22:11

So, wieder mal eine kurze Frage meinerseits;
Ist es möglich den PHP Interprter irgendwie dazu zu bringen, dass er Funktionen im Code Case Sensitive behandelt?
Ein kurzes Beispiel:
<?php
	class Array
	{
		  function Die()
		  {
			    die('^^');
		  }
	}
	Array::Die();
?>

Sprich, Sinn und Zweck der ganzen Sache wäre es, dass wenn ich eine Klasse Array mit großem "A" erstelle, die die Funktion "Die" mit großem "D" beinhaltet (Nur ein Beispiel das mir gerade eingefallen ist, könnte jede andere bei PHP vordefinierte Funktion sein) nicht mit der PHP eigenen Funktion "die()" verwechselt wird.
Wenn jemand ne idee hat wie man das am besten realisieren könnte, ich bin sehr dankbar für alle Vorschläge :wink:

Dieser Beitrag wurde von [Elite-|-Killer] bearbeitet: 16. Mai 2007 - 22:12

0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 16. Mai 2007 - 22:21

Dein Beispiel wird nicht funktionieren, da es sich um keine statische Methode handelt. :wink:

Abgesehen davon, dass PHP Case-Sensitive ist, würde das dem Interpreter sowieso kein Problem bereiten, da er den Quellcode aus dem Kontext heraus interpretiert.
$meineKlasse->die(); ist nicht die Funktion die();
0

#3 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 16. Mai 2007 - 22:42

Ja, das Beispiel war auch nur schnell hingeschrieben;
Nochmal etwas konkreter:
[incl. Statischer Methode]
Sobald ich auf die Idee komme eine Funktion "Die" zu nennen, kommt der php Interpreter eben auf die Idee:
Parse error: syntax error, unexpected T_EXIT, expecting T_STRING in [...]\htdocs\test\index.php on line 4
Sprich, es kommt gar nicht soweit, dass ich "$meineKlasse->die();" aufrufen könnte, da ich an der Definition der Funktion scheitere -.-
0

#4 Mitglied ist offline   asko 

  • Gruppe: aktive Mitglieder
  • Beiträge: 144
  • Beigetreten: 17. November 02
  • Reputation: 0

geschrieben 17. Mai 2007 - 08:32

Beitrag anzeigenZitat ([Elite-|-Killer]: 16.05.2007, 23:42)

Sobald ich auf die Idee komme eine Funktion "Die" zu nennen, kommt der php Interpreter eben auf die Idee...


Sorry, aber jeder blutige Anfänger bekommt in jedem Anfängerbuch für Megadummies eingebläut das man eigenen Funktionen NIEMALS so benennen soll das eine Verwechslungsgefahr mit den PHP-internen bestehen kann (das selbe gilt auch für Konstante). Und jetzt suchst Du einen Weg wie man diese Sicherheitsfunktion von PHP umgehen kann? Entschuldige, aber das ist Eingefügtes Bild
0

#5 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 17. Mai 2007 - 11:06

Na-ja, Verwechslungsgefahr besteht bei mir nicht, da ich selber immer den ersten Buchstaben in Funktionen/Klassen groß schreibe. Insofern wäre es kein Problem, wenn ich den Interpreter dazu bringen könnte es streng Case Sensitive zu behandeln, sprich:
Parse error: syntax error, unexpected T_EXIT, expecting T_STRING in [...]\htdocs\test\index.php on line 4
fällt dann weg, weil er das Die nicht als die Funtkion die() sondern als einen normalen String für einen Funktions/Klassen Namen behandeln könnte.
Ich hab nur keine Idee wie man das realisieren könnte :)
Zum:
Eingefügtes Bild
Ich weiss, dass es ggf. so manchen nicht logisch nachvollziebar ist wieso ich es so haben möchte, aber in der Praxis hat es hald schon genug fälle gegeben in der mir vordefinierte PHP Funktionen einen strich durch die Rechnung gemacht haben bei der Funktionsbennenung, obwohl das bei einer streng Case Sensitiven behandlung nicht unbedingt der Fall hätte sein müssen.
0

#6 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 17. Mai 2007 - 13:42

In PHP sind nur Variablen case-sensitive, Klassen und Methoden aber nicht.

class TestKlasse { }
class testklasse { } # Geht nicht.


get_declared_classes() gibt [128] => TestKlasse zurück.

class EineKlasse {
	final function EineFunktion() {}
}

class AndereKlasse extends EineKlasse {
	public function einefunktion() {} # Hier gibts nen Fehler.	
}


In deiner Klasse wird Die als die eingebaute Funktion die() aufgefasst. PHP beschwert sich, dass du keinen Funktionsnamen (Typ T_STRING) lieferst, sondern irgendwas anderes (Typ T_EXIT hier).

class BeliebigeKlasse {
	function Die() {} # "syntax error, unexpected T_EXIT, expecting T_STRING"
}


Streng genommen ist das Problem hier gar nicht, dass man die Funktion die() nicht neu deklarieren kann, denn dazu kommt man gar nicht erst. die() wird schon ausgeführt und gibt was anderes zurück als einen String, den man braucht, um den Methodennamen festzulegen.

Ach und es besteht gar keine Verwechslungsgefahr. Es ist einfach nicht möglich Funktionen neu zu deklarieren (geht's hier überhaupt darum?). Das geht bei benutzergeschaffenen Dingen genau so wenig wie bei eingebauten Dingen. Aber wo ist das Problem? Benenne deine Funktionen doch einfach anders.

Stimmt das was ich sage?

Dieser Beitrag wurde von PelzigesWaldtier bearbeitet: 17. Mai 2007 - 13:47

0

#7 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 17. Mai 2007 - 14:10

Beitrag anzeigenZitat (PelzigesWaldtier: 17.05.2007, 12:42)

In deiner Klasse wird Die als die eingebaute Funktion die() aufgefasst. PHP beschwert sich, dass du keinen Funktionsnamen (Typ T_STRING) lieferst, sondern irgendwas anderes (Typ T_EXIT hier).

class BeliebigeKlasse {<BR>      function Die() {} # "syntax error, unexpected T_EXIT, expecting T_STRING"<BR>  }


Streng genommen ist das Problem hier gar nicht, dass man die Funktion die() nicht neu deklarieren kann, denn dazu kommt man gar nicht erst. die() wird schon ausgeführt und gibt was anderes zurück als einen String, den man braucht, um den Methodennamen festzulegen.

Genau darin besteht mein Problem.
Die Deklaration ist nicht möglich da es ausgeführt wird, auch wenn ich statt "die" "Dieschreibe. Also ich suche eine Möglichkeit, dem PHP Interpreter wigendwie zu sagen, dass er Die als String behandeln soll und nicht mit die, der Funktion gleichsetzen soll.

Zitat

Ach und es besteht gar keine Verwechslungsgefahr. Es ist einfach nicht möglich Funktionen neu zu deklarieren (geht's hier überhaupt darum?).

Mir gehts nicht darum die, oder was auch immer neu zu deklarien, sondern eine Funktion scheiben zu können, die den gleichen Namen wie eine PHP interne Funktion haben kann, aber nicht als solche erkannt wird, da sie sich in der Schreibweise unterscheidet.
Also so nach der manier, alle Funktionen/Klasse die einen Großbuchstaben enthalten soll der PHP Interpreter nie als PHP Interne Funktion/Klasse ansehen.

Zitat

Das geht bei benutzergeschaffenen Dingen genau so wenig wie bei eingebauten Dingen. Aber wo ist das Problem? Benenne deine Funktionen doch einfach anders.

Stimmt das was ich sage?

Genau das anders bennen ist es ja was ich dadurch umgehen möchte :)

//Nachtrag:
in der php.ini gibts ja folgende Möglichkeit:

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =


Ich möchte hald, dass er alles wie Die, Array, Require etc. deaktiviert aber hald nicht, die, array, require

Dieser Beitrag wurde von [Elite-|-Killer] bearbeitet: 17. Mai 2007 - 14:27

0

#8 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 17. Mai 2007 - 14:26

Zitat

Mir gehts nicht darum die, oder was auch immer neu zu deklarien, sondern eine Funktion scheiben zu können, die den gleichen Namen wie eine PHP interne Funktion haben kann, aber nicht als solche erkannt wird, da sie sich in der Schreibweise unterscheidet.


Du kannst ja mal mein geniales (Achtung Ironie) Script "Override" ausprobieren. http://pelzigeswaldt...ipsel/override/

Zitat

Override ist ein kleines PHP-Script, welches “on-the-fly” Funktionsaufrufe umleitet bzw. austauscht.


Du könntest also deine Funktionen als MeineDieMethode deklarieren, sie aber als die aufrufen, wenn du das alles richtig eingestellt hast in Override. Aber Hey, was soll das?

Meines Wissens nach kann man das was du willst nicht einfach so machen. Nur halt durch solche Spaß-Script wie das obige. Aber das wird nie wirklich zufriedenstellend funktionieren. Vielleicht kennt ja jemand anders eine Möglichkeit dein Ziel zu erreichen.

Dieser Beitrag wurde von PelzigesWaldtier bearbeitet: 17. Mai 2007 - 14:27

0

#9 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 17. Mai 2007 - 15:06

Danke erstmal, ich werde mir das Script mal an sehen, mal sehen ob mich das weiter bringt :)

Zitat

Meines Wissens nach kann man das was du willst nicht einfach so machen. Nur halt durch solche Spaß-Script wie das obige. Aber das wird nie wirklich zufriedenstellend funktionieren. Vielleicht kennt ja jemand anders eine Möglichkeit dein Ziel zu erreichen.

Eben, ich befürchte ja fast, dass sich das nur mit Hilfe am rumbasteln am Interpreter bzw. Webserver lösen lässt, leider habe ich da noch keine brauchbare Idee gehabt :huh:

Dieser Beitrag wurde von [Elite-|-Killer] bearbeitet: 17. Mai 2007 - 15:07

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0