Разбор ООП с Delphinum

26.91K
.
(\/)____o_O____(\/)
Delphinum, А не прокатит такая штука, как с функцией,
http://php.net/manual/ru/funct ... -list
.
Koenig, нет, если набор аргументов совсем разный, то получится каша
.
РНР без разницы на то, что обращение к приватному члену класса идет от другого экземпляра этого класса, главное чтоб оно было изнутри.

Я тоже сильно удивился этому когда обнаружил, думал что это очередной косяк реализации.
.
L!MP, видимо инкапсуляция вяжется на уровне класса, а не экземпляров
.
╭∩╮ (`-`) ╭∩╮
# L!MP (09.12.2016 / 18:02)
РНР без разницы на то, что обращение к приватному члену класса идет от другого экземпляра этого класса, главное чтоб оно было изнутри.

Я тоже сильно удивился этому когда обнаружил, думал что это оч
Че то ты батенька намудрил...
Буду благодарен, если покажешь пример кода, где ты смог обратиться к "приватному члену класса от другого экземпляра этого класса"...
Я до сих пор знал, что подобное невозможно, к приватному члену нельзя обратиться даже из потомка...
.
AlkatraZ, есть такая магия:
class My{
  private $a;

  public function __construct($a){
    $this->a = $a;
  }

  public function copy(My $obj){
    $this->a = $obj->a;
  }

  public function getA(){
    return $this->a;
  }
}

$a = new My(1);
$b = new My(2);
$b->copy($a);
echo $b->getA(); // 1
.
L!MP
AlkatraZ, ну вот, на пример:

class A
{
    private $value;
    
    public function __construct($value)
    {
        $this->value = $value;
    }
    
    public function method(A $otherA)
    {
        return "{$this->value} {$otherA->value}"; // вот мы обращаемся к приватному свойству другого экземпляра класса
    }
}

$a1 = new A('OLOLO');
$a2 = new A('TROLOLO');

echo $a1->method($a2); //=> OLOLO TROLOLO
.
L!MP
Delphinum, в яве или с# так можно сделать?
====
Да, можно:
class A {
    private String value;
    public A(String value) {
        this.value = value;
    }
    public void method(A otherA) {
        System.out.println(this.value + " " + otherA.value);
    }
}

class Playground {
    public static void main(String[ ] args) {
        A a1 = new A("OLOLO");
        A a2 = new A("TROLOLO");
        
        a1.method(a2);
    }
}

Результат тот же.
.
L!MP, на счет c# не знаю, я на нем не пишу, а вот по поводу java, хороший вопрос... Никогда не задавался им раньше, щас уточню у знакомых жавистов
.
Да, в яве тоже можно так делать
Всего: 713