camelcase erkennen
Camel
- php
Hallo,
ich würde gerne einen Klassennamen in eine andere Schreibweise konvertieren.
HelloWorldController soll zu hello-world-controller werden. Wie macht man das in PHP am geschicktesten? Klassennanmen nur auf Zeichen, die im Ascii zu finden sind, beschränken und prüfen, ob die Zeichenkodierung des jeweiligen Zeichens <= 90 und >=65 ist?
noch eine andere Frage:
ist es eine gute Idee, in eigenen Exception-Klassen Businesslogik zu implementieren?
class NoRouteException extends Exception {
public function __construct($message, $code = 0) {
parent::__construct($message, $code);
}
public function xyz($c){
//do some custom stuff here
if($c == "foo")$this->someStuff();
if($c == "bar")$this->otherStuff();
}
private function someStuff(){
}
private function otherStuff(){
}
}
$c = "foo";
try{
$route = $router->getRoute();
} catch (NoRouteException $e){
$e->xyz($c);
}
hi,
Hallo,
ich würde gerne einen Klassennamen in eine andere Schreibweise konvertieren.
HelloWorldController soll zu hello-world-controller werden.
Warum?
mfg
tami
Hallo,
ich würde gerne einen Klassennamen in eine andere Schreibweise konvertieren.
HelloWorldController soll zu hello-world-controller werden.
warum nicht? Du denkst sicher, dass "hello-world-controller" der neue Klassenname werden soll... dem ist nicht so.
Zu meiner anderen Frage, hat da noch jemand was?
Tach!
ich würde gerne einen Klassennamen in eine andere Schreibweise konvertieren.
HelloWorldController soll zu hello-world-controller werden. Wie macht man das in PHP am geschicktesten?
Man schaut bei den anderen Frameworks in die Ecke für allgemeine Tools und Helper, weil die meist sowas schon implementiert haben. Ansonsten nimmt man geschickterweise einen regulären Ausdruck. Finde alles was Großbuchstabe ist, gefolgt von beliebig vielem, was kein Großbuchstabe ist. Von diesen Mustern lässt du alle suchen (preg_match_all()).
dedlfix.
hi
ich würde gerne einen Klassennamen in eine andere Schreibweise konvertieren.
HelloWorldController soll zu hello-world-controller werden. Wie macht man das in PHP am geschicktesten?Man schaut bei den anderen Frameworks in die Ecke für allgemeine Tools und Helper, weil die meist sowas schon implementiert haben. Ansonsten nimmt man geschickterweise einen regulären Ausdruck. Finde alles was Großbuchstabe ist, gefolgt von beliebig vielem, was kein Großbuchstabe ist. Von diesen Mustern lässt du alle suchen (preg_match_all()).
ok, stimmt. Da ich für mein Framework sowieso schon diese und jene Sache "geklaut" hab, kann ich da auch nochmal gucken. Aber nochmal was anderes: du schreibst, "Finde alles was Großbuchstabe ist"... wie macht man das denn? Wie finde ich zum Beispiel raus, ob folgendes Zeichen ein Großbuchstabe ist? => Β
Hast du zu meiner anderen Frage mit Exceptions noch was? War es falsch, zwei völlig verschiedene Fragen in einem Thread zu posten? Dann möchte ich mich hierfür gleich mal Entschuldigen.
viele grüße
Camel
Tach!
"Finde alles was Großbuchstabe ist"... wie macht man das denn? Wie finde ich zum Beispiel raus, ob folgendes Zeichen ein Großbuchstabe ist? => Β
Inwieweit hast du dich schon mit regulären Ausdrücken auseinandergesetzt? Großbuchstaben findet man zum Beispiel über eine Zeichenklasse, die genau nur diese Zeichen enthält: [A-Z]. Alles andere findet man mit der Negation dessen: [^A-Z]. Das findet dann auch Zahlen und Satzzeichen. Beim Auseinandernehmen eines Klassennamen interessieren jedoch nur die Großbuchstaben und alles andere kann man als zum Wort-Teil gehörig ansehen. Der Zeichenvorrat und die Regeln sind ja sowieso durch PHP (und dem selbst definierten Style-Guide) vorgegeben.
Hast du zu meiner anderen Frage mit Exceptions noch was? War es falsch, zwei völlig verschiedene Fragen in einem Thread zu posten?
Hatte ich lediglich übersehen.
ist es eine gute Idee, in eigenen Exception-Klassen Businesslogik zu implementieren?
In aller Regel nicht. Die Ausnahme-Klasse sollte nicht wissen müssen, was im konkreten Fall die passende Reaktion auf den Fehler ist. Sie sollte nur Informationen zum aufgetretenen Fehler transportieren.
Exceptions sollten auch nicht wesentlicher Teil der Geschäftslogik sein. Exceptions sind Ausnahmen. Vorhersehbare Fehler (zum Beispiel: suche einen Teilstring; wenn nichts zu finden normal ist, ist das kein Grund für eine Exception) sollte man auf anderem Wege prüfen.
dedlfix.
Hi,
"Finde alles was Großbuchstabe ist"... wie macht man das denn? Wie finde ich zum Beispiel raus, ob folgendes Zeichen ein Großbuchstabe ist? => Β
Inwieweit hast du dich schon mit regulären Ausdrücken auseinandergesetzt?
intensiv
"Großbuchstaben findet man zum Beispiel über eine Zeichenklasse, die genau nur diese Zeichen enthält: [A-Z]. Alles andere findet man mit der Negation dessen: [^A-Z]. Das findet dann auch Zahlen und Satzzeichen. Beim Auseinandernehmen eines Klassennamen interessieren jedoch nur die Großbuchstaben und alles andere kann man als zum Wort-Teil gehörig ansehen. Der Zeichenvorrat und die Regeln sind ja sowieso durch PHP (und dem selbst definierten Style-Guide) vorgegeben."
Hast du das Zeichen geprüft? Mit deiner Regel [A-Z] werde ich das nicht finden dürfen... es sei denn, die Regel wird sehr, sehr lang. Allerdings weiss ich gerade nicht, ob Β überhaupt in einem Klassennamen stehen darf...
ist es eine gute Idee, in eigenen Exception-Klassen Businesslogik zu implementieren?
In aller Regel nicht. Die Ausnahme-Klasse sollte nicht wissen müssen, was im konkreten Fall die passende Reaktion auf den Fehler ist. Sie sollte nur Informationen zum aufgetretenen Fehler transportieren.
Exceptions sollten auch nicht wesentlicher Teil der Geschäftslogik sein. Exceptions sind Ausnahmen. Vorhersehbare Fehler (zum Beispiel: suche einen Teilstring; wenn nichts zu finden normal ist, ist das kein Grund für eine Exception) sollte man auf anderem Wege prüfen.
ah, ok, danke. Dann baue ich da was um.
Tach,
Hast du das Zeichen geprüft? Mit deiner Regel [A-Z] werde ich das nicht finden dürfen... es sei denn, die Regel wird sehr, sehr lang. Allerdings weiss ich gerade nicht, ob Β überhaupt in einem Klassennamen stehen darf...
da PHP nicht Unicode-fähig ist (außer einzelnen Funktionen) sondern nur mit Byte-Werten arbeitet, kann es gar nicht in einem Klassennamen stehen: „A valid class name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.“ - http://php.net/manual/en/language.oop5.basic.php
mfg
Woodfighter
Hi,
Hast du das Zeichen geprüft? Mit deiner Regel [A-Z] werde ich das nicht finden dürfen... es sei denn, die Regel wird sehr, sehr lang. Allerdings weiss ich gerade nicht, ob Β überhaupt in einem Klassennamen stehen darf...
da PHP nicht Unicode-fähig ist (außer einzelnen Funktionen) sondern nur mit Byte-Werten arbeitet, kann es gar nicht in einem Klassennamen stehen: „A valid class name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.“ - http://php.net/manual/en/language.oop5.basic.php
Jo, dachte ich mir schon. Allerdings hatte sich meine Frage von einer expliziten (Klassenname) zu einer allgemeineren gewandelt: Großbuchstaben erkennen. Ich dachte, das wäre so verstanden worden. Meines Erachtens gibt es keinen einfachen Weg, Großbuchstaben zu erkennen, wenn man sich nicht auf A-Z beschränkt. Für meinen Fall ist natürlich der Ausdruck völlig ausreichend.
Somit bedanke ich mich schon mal für die Mühe
Camel
Tach!
Hast du das Zeichen geprüft? Mit deiner Regel [A-Z] werde ich das nicht finden dürfen... es sei denn, die Regel wird sehr, sehr lang. Allerdings weiss ich gerade nicht, ob Β überhaupt in einem Klassennamen stehen darf...
Klassennamen (und andere Bezeichner) sollten per Style Guide auf englische Namen festgelegt werden. Dann ergibt sich das Problem anderer Zeichen nicht.
Jo, dachte ich mir schon. Allerdings hatte sich meine Frage von einer expliziten (Klassenname) zu einer allgemeineren gewandelt: Großbuchstaben erkennen.
Für die Erkennung aller möglichen Großbuchstaben unterm Unicode-Himmel hilft dir Unicode character properties.
dedlfix.