Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 14:01

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



OOP PHP, Simple Namensausgabe mit Konstruktor

Discussion on OOP PHP, Simple Namensausgabe mit Konstruktor within the Web Development forum part of the Coders Den category.

Closed Thread
 
Old   #1
 
Mad0ck's Avatar
 
elite*gold: 313
Join Date: Oct 2014
Posts: 1,367
Received Thanks: 284
OOP PHP, Simple Namensausgabe mit Konstruktor

Guten Tag Liebe epvp Comj.

Ich wollte mir oop php etwas aneignen, und habe diesbezüglich ein skript von einem Lehrer bekommen, mit ein paar Beispielen dazu.

Da ich noch relativ am Anfang bin, weiß ich überhaupt nicht, wo hier im folgendem Code das Problem liegt.

PHP Code:
<?php
class Name {
    
// Spezielle Methoden - Magische Methoden
    
private $vorname;
    private 
$nachname;

    
// Beispiel 1 Methoden
    
public function __construct($vorname$nachname) {
        
$this->vorname  $vorname;
        
$this->nachname $nachname
    }

    public function 
getVorname() {
        return 
$this->vorname;
    }

    public function 
getNachname() {
        return 
$this->nachname;
    }
}
?>
Hier habe ich einen Konstruktor definiert, welcher beim erzeugen eines Objektes bswps new Name(); 2 Parameter braucht. Voranme und Nachname.


PHP Code:
<?php
// usikschule  Beispiel 1 vom 15.02.2017

require_once 'class/Name.php';

class 
Lehrer {
    private 
$name;
    private 
$geschlecht;

    public function 
__construct($name$geschlecht) {
        
$this->name $name;
        
$this->geschlecht $geschlecht;
        
    }

    public function 
getGeschlecht(){
        return 
$this->geschlecht;
    }
    public function 
getName() {
        return 
$this->name;
    }    
 }
?>
Nun deklariere ich eine neue Klasse Lehrer in einem neuem .php dokument. Der Konstruktor hier braucht auch wieder 2 paramter nämlich Name und Geschlecht.
Mit getName() , kann ich mir dann den Namen ausgeben lassen.

PHP Code:
<?php

require_once 'class/Lehrer1.php';
require_once 
'class/Name.php';

$personX = new Lehrer(new Name("Max","Muster"), "M");
echo 
$personX->getName();

?>
Im letzen neuen Dokument, erzeuge ich ein neues Objekt aus Lehrer.
Lehrer braucht ja 2 Paramter wegen dem Konstruktor. Weil ich jedoch Vor und Nachname haben will und nicht nur " Max Muster" , erzeuge ich in new Lehrer ein neues Objekt Name.
Name hat 2 Parameter, und Lehrer nun auch 2.

mit echo wollte ich mir nun den Namen ausgeben lassen.
Die get function hätte ich ja deklariert in Lehrer.php.


Diese Fehlermeldung kommt.
Das wäre diese Zeile:
PHP Code:
echo $personX->getName(); 
ich verstehe nicht, was da jetzt so falsch daran ist

Bitte um Hilfe.

lg
Michi
Mad0ck is offline  
Old 02/16/2017, 17:15   #2

 
Syc's Avatar
 
elite*gold: 666
Join Date: Apr 2011
Posts: 5,810
Received Thanks: 2,418
PHP Code:
public function getName() { 
        return 
$this->name
    } 
Da returnst du das Nameobject. Anstatt dessen müsstest du eigentlich die Getter von Name returnen, damit du nen String zurückbekommst.
Syc is offline  
Thanks
1 User
Old 02/16/2017, 17:32   #3
 
Mad0ck's Avatar
 
elite*gold: 313
Join Date: Oct 2014
Posts: 1,367
Received Thanks: 284
Quote:
Originally Posted by Syc View Post
PHP Code:
public function getName() { 
        return 
$this->name
    } 
Da returnst du das Nameobject. Anstatt dessen müsstest du eigentlich die Getter von Name returnen, damit du nen String zurückbekommst.
ok.
ich habe schon etwas probiert, bevor ich diesen post geschrieben habe.
PHP Code:
public function getName() { 
        return 
$this->vorname
         return 
$this->nachname
    } 
Aber das funktioniert ja auch nicht.
da zeigt es mir nur das erste return an.

Weißte da zufällig wie ich Vor und Nachname bei einer get function zurückliefern kann ?

lg
Mad0ck is offline  
Old 02/16/2017, 17:48   #4
 
elite*gold: 0
Join Date: May 2015
Posts: 700
Received Thanks: 444
Du kannst einfach deine alte getName() Funktion nehmen und dann $lehrer->getName()->getVorname() bzw. $lehrer->getName()->getNachname() machen.

Ansonsten kann eine Funktion in PHP immer nur ein Wert zurückgeben. Auswege wären:
* Vor- und Nachname bei getName() schon zu konkatenieren
* Ein Objekt mit beiden Werten zurückgeben (also so, wie du es in deinem Eingangspost schon machst)
* Ein Array mit beiden Werten zurückgeben (doof)
* Zwei Methoden statt einer anzubieten, also Lehrer::getVorname() und Lehrer::getNachname()
algernong is offline  
Thanks
1 User
Old 02/16/2017, 17:50   #5


 
False's Avatar
 
elite*gold: 0
The Black Market: 243/0/0
Join Date: Apr 2011
Posts: 11,115
Received Thanks: 2,436
Quote:
Originally Posted by Mad0ck View Post
ok.
ich habe schon etwas probiert, bevor ich diesen post geschrieben habe.
PHP Code:
public function getName() { 
        return 
$this->vorname
         return 
$this->nachname
    } 
Aber das funktioniert ja auch nicht.
da zeigt es mir nur das erste return an.

Weißte da zufällig wie ich Vor und Nachname bei einer get function zurückliefern kann ?

lg
Du kannst immer nur ein return nutzen, danach wird an der Stelle der Code abgebrochen.
Für Vor- und Nachname müsstest du z.b. "return $this->vorname . " " . $this->nachname" machen.
False is offline  
Thanks
1 User
Old 02/16/2017, 18:05   #6
 
Mad0ck's Avatar
 
elite*gold: 313
Join Date: Oct 2014
Posts: 1,367
Received Thanks: 284
[/QUOTE]

Quote:
Originally Posted by .ƒaℓsє. View Post
Du kannst immer nur ein return nutzen, danach wird an der Stelle der Code abgebrochen.
Für Vor- und Nachname müsstest du z.b. "return $this->vorname . " " . $this->nachname" machen.
Dann kann ich ja direkt bei der Klasse Lehrer, beim Konstrukor,dass $name weglassen und druch $vorname und $nachname ersetzen oder ?

Bzw. dann kann ich die Klasse Name ja generell löschen ôo ?

lg
Mad0ck is offline  
Old 02/16/2017, 18:23   #7
 
elite*gold: 0
Join Date: May 2015
Posts: 700
Received Thanks: 444
Quote:
Originally Posted by Mad0ck View Post


Dann kann ich ja direkt bei der Klasse Lehrer, beim Konstrukor,dass $name weglassen und druch $vorname und $nachname ersetzen oder ?

Bzw. dann kann ich die Klasse Name ja generell löschen ôo ?

lg
Ja, könntest du. Du musst abwägen, ob eine Klasse sinnvoll ist - oder eben nicht.

Brauchst du die Klasse tatsächlich nur, um den Vor- und Nachnahmen zu speichern -- und das nur an einer Stelle? Dann würde ich darauf verzichten. Wobei das auch sinnvoll sein kann; damit drückst du nämlich ganz deutlich aus, dass der Vor- und Nachname zusammen gehört.

Besteht ein Name aus noch mehr?
function __construct($vorname, $zweiterVornahme, $dritterVornahme, $nachname, $bedeutungDesNamens, ...)
Dann doch lieber eine Klasse Name.
Ebenso, wenn du Operationen aus einem Namen ausführen möchtest.

Willst du zu einem Namen (zum Beispiel) immer berechnen können, wie verbreitet er in Deutschland ist? Dann wieder eine eigene Klasse mit entsprechender Methode.

Welche Klassen man erstellt ist oft nicht so einfach zu entscheiden. Zumindest geht es mir so. Bin aber auch kein Experte.
Zuwenig Klassen sind doof, übermodellieren ist aber auch nichts.
algernong is offline  
Thanks
1 User
Old 02/17/2017, 04:58   #8
 
elite*gold: 0
Join Date: Apr 2015
Posts: 428
Received Thanks: 361
Was du hat auch machen könntest, wäre die Magische Methode toString() zu verwenden:

PHP Code:
<?php

class Name {
    private 
$name;
    private 
$gender;
    
    public function 
__construct($name$gender
    {
        
$this->name $name// setzt private $name = $name
        
$this->gender $gender// setzt private $gender = $gender
    
}
    
    public function 
__toString() // Diese Function wird aufgerufen, sobald das Object von "Name" in eine Zeichenkette umgewandelt wird
    
{
        return 
'Name: ' $this->name ' Geschlecht: ' $this->gender;
    }
}

$name = new Name('Yannick''Männlich'); // Object von "Name"
echo $name// Echo verlangt eine Zeichenkette -> __toString() Resultat: Name: Yannick Geschlecht: Männlich

?>
#Metho is offline  
Thanks
1 User
Old 02/17/2017, 05:15   #9
 
ctra's Avatar
 
elite*gold: 0
Join Date: Aug 2016
Posts: 68
Received Thanks: 10
Quote:
Originally Posted by Mad0ck View Post
ok.
ich habe schon etwas probiert, bevor ich diesen post geschrieben habe.
PHP Code:
public function getName() { 
        return 
$this->vorname
         return 
$this->nachname
    } 
Aber das funktioniert ja auch nicht.
da zeigt es mir nur das erste return an.

Weißte da zufällig wie ich Vor und Nachname bei einer get function zurückliefern kann ?

lg
Wie bereits erwähnt wurde... es ist nur ein return möglich.. Das return funktioniert ähnlich wie ein "Unterbrechung" Sofern ein return ausgeführt wird bricht die Funktion ab und alles was nach dem return ausgeführt wird ist nicht mehr "reachable", wie mein PHP Storm wohl sagen würde

Quote:
Originally Posted by Mad0ck View Post



Dann kann ich ja direkt bei der Klasse Lehrer, beim Konstrukor,dass $name weglassen und druch $vorname und $nachname ersetzen oder ?

Bzw. dann kann ich die Klasse Name ja generell löschen ôo ?

lg
Ich würde die Referenz auf den Namen Obeject wohl lassen und einfach wie bereits gesagt jede Object Class, die in irgendeiner Form mal mit echo ausgegeben werden soll, mit einer toString Methode ausstatten.

Du wirst in der Schule zwar keine wirklich komplexe bzw. umfangreiche Beispiele programmieren (nehme ich mal an..) dennoch ist es mit einer gegebenen Referenz zu einem Name Object einfacher diverse Änderungen umzusetzen, weil du dann nur in der Object Class name was ändern musst und eventuell einen neuen Konstruktor hinzufügen (um z.B. zweit Namen, Titel etc pp).. hinzuzufügen.

Darüber hinaus kannst du in Zukunft dann auch noch mit dem name Object das Prinzip der Vererbung anwenden was auch noch viel Code spart... Wird dir dein Lehrer sicher noch beibringen wollen.

grüße
ctra is offline  
Thanks
1 User
Old 02/17/2017, 06:36   #10
 
Mad0ck's Avatar
 
elite*gold: 313
Join Date: Oct 2014
Posts: 1,367
Received Thanks: 284
Ich danke euch
Vorallem großes Danke an
@algernong
@#Metho
@ctra

Das "Problem" wurde nun gelöst ( auf 3-4verschiedene Arten ^^ ), und habe das Problem generell, welches ich hatte auch verstanden !

Unglücklicherweise, kam das Kapitel " Magische Methoden " ,erst nach dem Destruktor und ich war erst beim Konstruktor q.q *FacePalmMySelfe*

Mir wurde jedoch auch alles bis ins kleinste Detail von @algernong via PN erklärt.

Wie gesagt, nochmals Danke an alle die sich immer die Mühe geben, um uns Neulingen zu helfen bei diversen Verständnisproblemen.

lg Mad0ck

#closerequest
Mad0ck is offline  
Thanks
2 Users
Old 02/17/2017, 11:06   #11
dotCom
 
Devsome's Avatar
 
elite*gold: 9842
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 16,871
Received Thanks: 4,686
Freut mich :3

#closed
Devsome is offline  
Thanks
1 User
Closed Thread


Similar Threads Similar Threads
[C++] Move-Konstruktor zu oft aufgerufen?
12/28/2016 - C/C++ - 2 Replies
Abend, folgendes: es werden 10 Objekte vom Typ 'Foo' erstellt und nach Möglichkeit in einen Vector gepusht. Wieso wird der Move-Konstruktor 35x (insgesamt, sprich: nicht á Objekt) aufgerufen? Weitere Frage: Wenn ich den Move-Konstruktor lösche ( '= delete' ), müsste doch der Kopier-Konstruktor zum Einsatz kommen, jedenfalls war mein Ansatz dies so zu erzwingen. Der Compiler (MSVC) jagt mir dabei eine Fehlermeldung (C2280 - Es wurde versucht, auf eine gelöschte Funktion zu verweisen.) um die...
Konstruktor bei strings als char pointer
11/14/2015 - C/C++ - 6 Replies
hey, Wie sollten die konstruktoren bei char arrays aussehen (idealfall) z.b man hat die klasse class st{ //klasse für strings char* satz; int laenge; public: st(){ satz = NULL;
Konstruktor Frage
05/14/2015 - Web Development - 4 Replies
Hallo, Ich habe hier ein folgendes Programm (OOP) indem ein Konstruktor ist , nun ist meine Frage: Ich versteh nicht wie es den Namen des Fahrzeugs anzeigt(Ausgabe auf dem Bildschirm). Es wird durch den Code $this->bezeichnung angezeigt aber ich habe dieses neue Fahrzeug ja nicht als bezeichnung "makiert/angegeben" ich meine es so z.B $vespa = bezeichnung (z.B) Hier der Code:
[QUEST]Frage zur Namensausgabe eines Spielers
08/04/2012 - Metin2 Private Server - 5 Replies
Guten Abend liebe Community, ich bin gerade dabei, eine Lotterie-Quest zu schreiben. In meiner Quest, soll man den letzten Gewinner und seinen Gewinn einsehen können. Aber wie kann ich machen, das der letzte Gewinner und sein Gewinn ausgegeben werden ohne jeden Tag die Quest zu ändern, neu hochzuladen und /reload q zu machen? Nochmal zur kurzen Erklärung: Es gewinnt beispielsweise "Max". Wie können nun andere in einer Quest seinen Namen sehen? MFG
[C++]Konstruktor Problem
07/29/2011 - C/C++ - 7 Replies
Hallo , ich habe ein Problem bzw eher gesagt eine Frage zu meinem Code. Ich habe mir eine schnuckelige Klasse angelegt die wie folgt aussieht: class Krieger { private:



All times are GMT +1. The time now is 14:01.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.