Einige kleine Fragen zu PHP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Einige kleine Fragen zu PHP

    Hi,

    Da ich ja hier bin um etwas zu lernen habe ich mal einige kleinere Fragen zu PHP, wo es sich wirklich nicht lohnt zu jeder einen eigenen Thread aufzumachen.
    Los gehts:

    1. Bei einem String kann man ja ein einzelnes Zeichen mit einer eckigen Klammer auslesen (z.B $string[2] liest das 3. Zeichen des Strings $string aus). Das geht aber auch mit geschweiften Klammern ($string{2}) und mit substr(). Was ist der unterschied zwischen den 3 Methoden, ausser das substr natürlich mächtiger ist? Was ist am schnellsten und wo liegen die Nachteile?
    2. Single Quotes oder Double Quotes, "Hallo ich heisse $name" vs 'Hallo ich heisse '.$name?
    3. Es gibt ja auch noch `welche ich auch schon als "Anführungszeichen" in PHP gesehen habe. Was ist deren Sinn?


    greez

    bitsnack

    PS: Kommen sicher noch einige weitere unnötige Fragen dazu ^^
  • Hi,
    du wirst noch feststellen, dass es in PHP - genau wie in den meisten Programmiersprachen, die über Version 1.0 hinaus gekommen sind - oftmals viele Möglichkeiten gibt um das selbe zu erreichen.
    Das hat meist mehr mit historische Gründen als mit Performance oder einem tieferem Sinn zu tun ;)
    Die glaube mal gelesen zu haben, dass die {} Schreibweise veraltet ist, und man eher [] verwenden sollte Das Kennt man auch aus anderen Programmiersprachen wo ein String nichts anderes als ein Array aus einzelnen Zeichen ist.

    Was die Quotes angeht, so gibt es natürlich den wichtigen Unterschied, dass das eine interpretiert wird, und das andere nicht.
    Was du aber nun eher verwenden magst, hängt von deinem persönlichen Geschmack ab. Überleg dir irgendein Schema
    Ich halte mich meist an die Zend Coding Conventions: framework.zend.com/manual/en/c…tandard.coding-style.html

    Single Quotes
    When a string is literal (contains no variable substitutions), the apostrophe or "single quote" should always be used to demarcate the string:

    Quellcode

    1. $a = 'Example String';

    String Literals Containing Apostrophes

    Double Quotes
    When a literal string itself contains apostrophes, it is permitted to demarcate the string with quotation marks or "double quotes". This is especially useful for SQL statements:

    Quellcode

    1. $sql = "SELECT `id`, `name` from `people` "
    2. . "WHERE `name`='Fred' OR `name`='Susan'";

    This syntax is preferred over escaping apostrophes as it is much easier to read.
  • Ich benutze eigentlich immer Singlequotes, nur in MySQL-Statements eben Doublequotes.
    Danke schonmal :). Nächste Frage:
    Welche Patterns, Konventionen etc sollte man sonst noch kennen, ausser MVC, DRY, KISS, CamelCase usw?
  • Also zu den Grundlagen gehören die Design Patterns der "Gang of Four", siehe auch bei der WIkipedia: de.wikipedia.org/wiki/Entwurfsmuster#Liste_von_Mustern
    Die finden immer irgendwann ihre Anwendung, nicht alle im Webbereich - aber man sollte Sie dennoch alle kennen.

    • Abstract Factory
    • Adapter
    • Chain of Responsibility
    • Business Delegate
    • Builder
    • Composite
    • Command
    • Data Access Object
    • Factory Method
    • Bridge
    • Interpreter
    • Data Transfer Object
    • Prototype
    • Decorator
    • Iterator
    • Dependency Injection
    • Singleton
    • Facade
    • Mediator
    • Inversion of Control
    • Flyweight
    • Memento
    • Model View Controller
    • Proxy
    • Null Object
    • Model View Presenter
    • Observer
    • Plugin
    • State
    • Fluent Interface
    • Strategy
    • Template Method
    • Visitor

    Code Conventions... naja, man fährt relativ sicher damit, wenn man einfach alles lesbar macht und dokumentiert... Ich habe mir noch keine Code Conventions von vorne bis hinten durchgelesen ;)
  • sag mal donut ... auf welche frage hast du eigentlich nicht die passende antwort :)
    und danke für den wiki link ... ist für mich auch von interesse :)
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Noch eine Frage... ^^

    Es gibt ja in Ruby diese :iwas als.... ich kann zuwenig Ruby um das benennen zu können.
    Jedenfalls ein Label oder wie auch immer welches nur einmal in den Arbeitsspeicher geschrieben wird und dann von überall nurnoch darauf verwiesen wird, ähnlich wie eine Instanz in PHP5.
    Gibt es sowas auch in PHP? Ich meine das mal gesehen zu haben. Für was kann man sowas nutzen?
  • Ehh....
    Ich denke du hast mich falsch verstanden, oder ich versteh dich jetzt falsch...

    In einem Script glaube ich mal statt z.B $foo['bar'] $foo[:bar] gesehen zu haben.
    Das erste was mir dazu eingefallen ist, sind diese Dinger mit dem Doppelpunkt am Anfang in Ruby.
    Ehrlich gesagt weiss ich nicht wie ich es erklären soll, oder ob es das überhaupt gibt und es wirklich für das ist für was ich es halte... :-/

    /E: Es könnte sein das ich da was verwechselt hab. Hier die letzten beiden Quellcode-Boxen.
    Doch für was sind die Keys mit den Doppelpunkten dort und was machen die im SQL-Statement?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bitsnack ()

  • bitsnack schrieb:

    Ehh....
    Ich denke du hast mich falsch verstanden, oder ich versteh dich jetzt falsch...

    In einem Script glaube ich mal statt z.B $foo['bar'] $foo[:bar] gesehen zu haben.
    Das erste was mir dazu eingefallen ist, sind diese Dinger mit dem Doppelpunkt am Anfang in Ruby.
    Ehrlich gesagt weiss ich nicht wie ich es erklären soll, oder ob es das überhaupt gibt und es wirklich für das ist für was ich es halte... :-/

    /E: Es könnte sein das ich da was verwechselt hab. Hier die letzten beiden Quellcode-Boxen.
    Doch für was sind die Keys mit den Doppelpunkten dort und was machen die im SQL-Statement?


    ne ne, in php gibt es keine Symbole. Du könntest diese aber mit static oder const "nachbauen".

    Die Doppelpunkte sind für den Zugriff auf statische Funktionen oder Parameter.
    Klassenname::Methode oder Klassenname:: Parameter kannst du nutzen ohne eine Instanz zu erstellen (static halt ^^)
  • Ja, das weiss ich schon ^^
    Paamayim Nekudotayim :)

    Ich meinte die beiden letzten Code-Boxen bei meinem letztgeposteten Link.
    Für was ist da der Doppelpunkt? (:implode1, :implode2)...
    Soweit wie ich bisher gelesen haben sollen das Platzhalter sein, das ist aber eine "Eigentschaft" von PDO, oder geht das überall mit PHP?
    Wenn ja: Wie funktioniert das, und wozu soll das gut sein? ^^

    Warscheinlich denke ich einfach mal wieder zu weit und es wird nur als stinknormale Platzhalter in einem String verwendet die dann ganz normal ersetzt werden ^^
  • hab mir mal kurz ! die wiki angesehen ...

    also wenn ich mir ein array erstelle

    PHP-Quellcode

    1. $varname = array (
    2. ':implode0' => 1,
    3. ':implode1' => 2,
    4. ':implode2' => 3
    5. );

    und diesen dann mit

    PHP-Quellcode

    1. print_r($varname);

    abbilde bekommst du eben diesen output

    Quellcode

    1. Array (
    2. [:implode0] => 1,
    3. [:implode1] => 2,
    4. [:implode2] => 3
    5. )

    hoffe das dir das hilft wieder den wald zu sehen inmitten der vielen vielen bäume :D
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Da ist :implode nen String:

    Quellcode

    1. $key = ':implode'.self::$escapecounter++;
    2. $pdoparams[$key] = $val;



    Der SQL-Befehl ist auch nen String, das kommt falsch rüber

    Quellcode

    1. "DELETE FROM user
    2. WHERE userID IN (:implode0,:implode1,:implode2)"


    Somit sieht das Array so aus:

    Quellcode

    1. Array (
    2. [":implode0"] => 1
    3. [":implode1"] => 3
    4. [":implode2"] => 5
    5. )
  • btw wie bekomme ich es hin, dass meine quellcodes als PHP quellcode angezeigt werden :D ?
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Ich hätte einfach Klassen von Exception abgeleitet, z.B. DatatypeNotValidException etc und die Ereignisse von da aus entsprechend zu loggen.
    Ich habe da denke ich auch etwas falsch verstanden. Die ExceptionHandler werden ja nur aufgerufen wenn eine Exception nicht gefangen wurde...