[JAVA] [PHP] Für diejenigen, die sich Sorgen um das Gewicht machen ~ Privater Sonderfall ~

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.

Versuchen Sie, eine Methode hinzuzufügen

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! ** ** **

Denken Sie ernsthaft nach

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 ***.

Warum machst du so eine lästige Sache?

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.

Zusammenfassung

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.

Recommended Posts

[PHP] Für diejenigen, die sich Sorgen um das Gewicht machen ~ Privater Sonderfall ~
Java Programmer Gold SE 8 Qualifikationsübersicht (für diejenigen, die mit Java vertraut sind)
Für diejenigen unter Ihnen, die denken, dass Sie JS im Frühjahr nicht lesen können?