Wie war das Ergebnis der ärztlichen Untersuchung, alle?
Hat Ihnen der Arzt gesagt, dass Sie wieder "übergewichtig" sind? Es ist schwer, weil meine Frau wütend wird und mein Chef mir sagt, ich soll abnehmen.
Wenn ja, halten Sie Ihr Gewicht mit dem "privaten" Eigentum geheim!
class Person
{
private $name;
//Streng geheim
private $weight;
public function __construct($name, $weight)
{
$this->name = $name;
$this->weight = $weight;
}
}
Ja, damit können Sie Ihr Gewicht verbergen. Ich bin glücklich.
Aber Sie möchten wissen, wie schwer dieser Kollege ist, der dicker zu sein scheint als Sie. [^ 1]
[^ 1]: Was macht Spaß zu wissen? Möchten Sie in das Gefühl der Überlegenheit eintauchen, dass "ich dünner bin als er"?
Ja, ich habe diese Methode für Sie geschrieben.
class Person
{
private $name;
private $weight;
public function __construct($name, $weight)
{
$this->name = $name;
$this->weight = $weight;
}
/**
*Vergleichen Sie, ob die Gewichte gleich sind
*/
public function isWeightEqual($other)
{
return $this->weight === $other->weight;
}
}
Oh, aber "$ other-> weight" ist ein "Privateigentum", nicht wahr? Diejenigen, die dachten.
Es tut uns leid. Das funktioniert gut.
$a = new Person("Yamada Taro", 60.5);
$b = new Person("Jiro Tanaka", 60.5);
var_dump($a->isWeightEqual($b)); //--> bool(true)
Wenn Sie Ihr Bestes geben, können Sie "isWeightGreaterThan ()" oder "isWeightLessThan ()" erstellen.
** Es nützt nichts, dein Gewicht zu verstecken! ** ** **
Tatsächlich ist es ordnungsgemäß in Zugriffsrechte von anderen Objekten im PHP-Handbuch geschrieben. ..
Objekte desselben Typs können auf die privaten und geschützten Mitglieder des anderen zugreifen, auch wenn sie nicht dieselbe Instanz sind. Dies liegt daran, dass die Details der Objektimplementierung innerhalb des Objekts bekannt sind.
Es wird gesagt, dass es schwierig ist, aber kurz gesagt, dass Sie auf "private" und "geschützte" Mitglieder zugreifen können, selbst wenn die Instanzen unterschiedlich sind, wenn sie vom gleichen Typ sind ***.
Eigentlich ist diese Spezifikation für Java dieselbe, aber [^ 2], [Java] Warum kann ich auf die privaten Felder anderer Instanzen zugreifen, wenn sie sich in derselben Klasse befinden? Ich habe einen sehr guten Kommentar gefunden.
[^ 2]: Es scheint in C ++ und C # dasselbe zu sein. Siehe Zugriff auf private Mitgliedsvariablen.
@shirakamus Wenn private eine Spezifikation ist, auf die nur von hier aus zugegriffen werden kann, was passiert mit der Implementierung der Methode equals ...
In Java werden Objektvergleiche mit der Methode equals ()
durchgeführt. Jedes Objekt erbt "Object.equals ()" wie folgt:
public boolean equals(Object o) {
return this == o;
}
Dies ist normalerweise ausreichend, aber Sie können auch die Methode equals ()
überschreiben. Sicher sieht es so aus. [^ 3]
[^ 3]: Eigentlich scheint es, dass Sie auch hashCode () überschreiben müssen, aber ich werde einmal Maßnahmen ergreifen. Weitere Informationen finden Sie unter Befolgen Sie den allgemeinen Vertrag, wenn Sie Gleiches überschreiben.
public class Person
{
private String name;
private double weight;
Person(String name, double weight)
{
this.name = name;
this.weight = weight;
}
@Override
public boolean equals(Object other)
{
if (this == other) {
return true;
}
if (other instanceof Person) {
Person person = (Person) other;
//Sie greifen auf ein privates Feld zu! !! !!
return person.name == this.name
&& person.weight == this.weight;
}
return false;
}
}
Der wichtige Teil ist der Teil "person.weight == this.weight".
Dieses person.weight
ist das private
Feld der als Argument übergebenen Instanz, es ist jedoch vom gleichen Person
-Typ und kann aufgerufen werden.
Wenn dies nicht möglich ist, müssen Sie den Getter wie "person.getWeight ()" durchgehen.
Es gibt kein equals ()
wie Java in PHP, aber als wir die Objektorientierung als Idee übernommen haben, haben wir wahrscheinlich dafür gesorgt, dass es sich wie Java und andere objektorientierte Sprachen verhält (wahrscheinlich). ).
Nun, wenn man fragt, ob es positiv verwendet werden soll, scheint es nicht bekannt zu sein, also denke ich, dass es besser ist, es zu stoppen.
Wenn Sie abnehmen, sollten Sie sich in erster Linie keine Sorgen um solche Probleme machen müssen.
** Sie sollten also abnehmen. ** ** **
(2018/1/13) Ich habe einen Untertitel hinzugefügt.