Aynı sınıftan başka bir nesnenin Yöntemi erişen korunan mülkiyet

2 Cevap php

Bir nesnenin yöntem, aynı sınıftan başka bir nesnenin bir koruma özelliğine erişmek mümkün olacak mıdır?

Ben PHP kodlama yaşıyorum ve ben sadece bir nesnenin korunan mülkiyet aynı nesnenin aynı sınıfta bile değil bir yöntemle erişilebilir izin olduğunu keşfetti.

Örnekte, ilk başta, size çıktı "3" alırsınız - fonksiyon readOtherUser olarak başarıyla değerini erişmiş olacak - ve bundan sonra bir PHP ölümcül hata ortaya çıkar - ana program aynı değeri erişim başarısız olacak gibi .

<?php

class user
{
protected $property = 3;

public function readOtherUser ()
{
    $otherUser = new user ();
    print $otherUser->property;
}
}

$user = new user ();

$user->readOtherUser ();
print $user->property;

?>

Bu bir PHP hata mı veya amaçlanan davranıştır (ve ben :) ... bu kavramı yeniden öğrenmeniz gerekecek) (ve aslında göndermeler vardır)? Diğer programlama dillerinde nasıl yapılır?

Teşekkürler!

2 Cevap

Bu amaçlanmıştır. Bu aynı sınıfın özel üyelerine erişmek için bile mümkün. Yani sınıf bilge modifiye değil objectwise düzenleyiciler olmak nitelemeler düşünüyorum.

PHP bu özelliğe sahip tek dil değil. Örneğin Java de bu vardır.

Bu davranışı amaçlar. Korunan bir değişken veya fonksiyon o sınıfın devralan, aynı sınıf veya herhangi bir sınıf tarafından erişilebilir anlamına gelir. Korumalı bir yöntem, yalnızca sınıf, örneğin içinde denebilir Bu gibi diyemem:

$object = new MyClass();
$object->myProtectedFunction();

Bu size bir hata verecektir. Ancak, belirlenen sınıf 'Sınıfım' içinde, size mükemmel koruma fonksiyonu çağırabilirsiniz.

Aynı variabeles için de geçerlidir. Özetlenebilir:

use PROTECTED on variables and functions when:
 1. outside-code SHOULD NOT access this property or function.
 2. extending classes SHOULD inherit this property or function.