MB: PHP 7 mehr typesiert?

Moin Community,

für mich persönlich ist es sehr schön PHP 7 typisierter machen zu können. Ich hab leider Punkte die mich sehr interessieren im Internet nicht finden können 😕.

Gibt es ein Objekt einer Klasse welches von einer Funktion als Funktionsparameter geforderten wird?

function foo( Quz bar ) {}

Gibt es nach einer Funktion oder Methode void was sie zwingt keine Ruckgabewert zu haben.

function foo() : void {}

Gibt es bei der initialisierung von Instanz oder statischen variablen Typen die zwingen so bleiben müssen?

class Foobar { private string foo; }

vlg MB

  1. Hallo MB,

    1. Ja.
    2. Nein. Es gibt return type declarations, aber keine Deklaration von void. Eine Funktion gibt immer was zurück, und sei es NULL.
    3. Da PHP per Wert übergibt, kann es dir im Fall von string egal sein. Bei Objekten ist das was anderes, und sowas wie das "const", das es in C++ gibt, ist in PHP nicht vorhanden.

    Rolf

    --
    Dosen sind silbern
    1. Hallo Rolf,

      2. Nein. Es gibt return type declarations, aber keine Deklaration von void. Eine Funktion gibt immer was zurück, und sei es NULL.

      Doch, seit PHP 7.1:

      function test() : void {
        /* tu was */
      
        // PHP Fatal error:  A void function must not return a value
        return "Hallo";
      }
      
      test();
      

      3. Da PHP per Wert übergibt, kann es dir im Fall von string egal sein. Bei Objekten ist das was anderes, und sowas wie das "const", das es in C++ gibt, ist in PHP nicht vorhanden.

      Das Schlüsselwort const gibt es in PHP – aber ich denke mal, dass du dich darauf beziehst, dass man ein Objekt nicht per const unveränderbar bekommen kann, so wie das in C++ ist und man dann nur per const als das Objekt nicht verändernde markierte Methoden aufrufen kann.

      Gruß
      Julius

  2. Tach!

    Gibt es ein Objekt einer Klasse welches von einer Funktion als Funktionsparameter geforderten wird?

    Es ist nicht möglich, eine bestimmte Instanz zu fordern. Du kannst nur die KLasse angeben, und von der (oder deren Erben) dann irgendeine Instanz bekommen.

    dedlfix.

  3. Moin,

    Gibt es bei der initialisierung von Instanz oder statischen variablen Typen die zwingen so bleiben müssen?

    class Foobar { private string foo; }
    

    ich weiß nicht ob ich dich richtig verstanden habe. Man kann in PHP für einzelne PHP Dateien stricte Typen deklarieren. Einfach am Anfang des Skriptes:

    declare( strict_types = 1);
    

    einfügen.

    Dann wäre zum Beispiel folgendes möglich:

    class Foo {
       function bar (int a, int b) : int {
          return a + b;
       }
    }
    
    $sum = new Foo();
    echo $sum->bar(1,2);
    

    aber folgendes nicht:

    class Foo {
       function bar (int a, int b) : int {
          return a + b;
       }
    }
    
    $sum= new Foo();
    echo $sum->bar(1.4 , 2);
    

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)