2016-06-29 16 views
1

Ich habe das folgende PHP-Skript geschrieben, das alle drei Variablen widerspiegelt, die im Konstruktor Book innerhalb der Klasse Book erfasst werden.Rückgabe und Echo mehrerer Variablen

Ich möchte PHP, um alle drei Variablen zu echo. Im Moment gibt es nur einen der drei. Hier

ist der Code:

<?php 

    class Book { 

      protected $title; 
      protected $author; 
      protected $yearPublished; 

      function Book($title, $author, $yearPublished) 
      { 
      $this->title=$title; 
      $this->author=$author; 
      $this->yearPublished=$yearPublished; 
      } 

     function Summary() 
     { 
      return $this->title; 
      return $this->author; 
      return $this->yearPublished; 
      sprintf($this->title, $this->author, $this->yearPublished); 
      } 
    } 


$test= new Book("Pride and Prejudice","John Doe","2016"); 
$test->Summary(); 
echo $test->Summary(); 
+0

Sie kommen von der Methode zurück. Was bedeutet, dass alles danach nicht ausgeführt wird. Das hat nichts mit OOP zu tun. – PeeHaa

+0

Nebenbemerkung: Sie brauchen nicht beide $ test-> Zusammenfassung(); echo $ test-> Zusammenfassung(); '- Sie können die erste sicher loswerden und tun einfach echo $ test-> Summary();', es ist gültige Syntax. –

+0

Prost für diesen Eingang @Fred -ii-! – ArsedianIvan

Antwort

1

Sie müssen sich ändern diese Funktion zu

drucken möchten
function Summary(){ 
     return $this->title; 
     return $this->author; 
     return $this->yearPublished; 
     sprintf($this->title, $this->author, $this->yearPublished); 
} 

Zu

function Summary(){ 
     return sprintf('%s %s %s',$this->title, $this->author, $this->yearPublished); 
} 
+0

Es macht keinen Sinn, auskommentierten Code an Ort und Stelle zu lassen, wenn er nicht funktioniert – stwalkerster

+0

@stwalkerster Es ist ihm mitzuteilen, was nicht im Code benötigt wird. Er kann es später entfernen. –

+0

Du bist eine Legende @Amit Ray! – ArsedianIvan

-1

Sie benötigen __toString magische Methode verwenden, wenn Sie Objekt als String http://php.net/manual/en/language.oop5.magic.php#object.tostring

class Book 
{ 
... 
    public function __toString() 
    { 
     return sprintf(
      '%s %s %s', 
      $this->title, 
      $this->author, 
      $this->yearPublished 
     ); 
    } 
... 
} 

$test = new Book("Pride and Prejudice","John Doe","2016"); 
echo $test; 
+0

OP versucht nicht, sein Objekt an eine Zeichenkette zu übergeben. – PeeHaa

3
  1. die Summary() Verfahren beendet, nachdem die ersten return

    Wenn innerhalb einer Funktion aufgerufen, endet die Return-Anweisung sofort die Ausführung der aktuellen Funktion, und gibt ihr Argument als Wert des Funktionsaufrufs.

    Sie wollten wohl diese:

    function Summary() 
    { 
        return sprintf('%s %s %s', $this->title, $this->author, $this->yearPublished); 
    } 
    

    auch Ihren Anruf sprintf() das erste Argument fehlte ($format).

  2. verwenden Sie nicht "im alten Stil" (pre-PHP 5) Konstrukteuren, wie sie sind veraltet, verwenden Sie stattdessen __construct()

    Old style Konstrukteuren DEPRECATED sind in PHP 7.0 und werden entfernt in einer zukünftigen Version. Sie sollten immer __construct() im neuen Code verwenden.

+0

Danke für die Antwort und die Erklärung @ ShiraNai7! Du bist ein legendärer Kumpel! – ArsedianIvan

+0

Das ist die richtige Antwort. – Chay22

Verwandte Themen