Yanıtlar:
Mevcut nesneye bir referanstır, en çok nesne yönelimli kodda kullanılır.
Misal:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
Bu, 'Jack' dizesini oluşturulan nesnenin bir özelliği olarak depolar.
$this
PHP'deki değişken hakkında bilgi edinmenin en iyi yolu, onu çeşitli bağlamlarda yorumlayıcıya karşı denemektir:print isset($this); //true, $this exists
print gettype($this); //Object, $this is an object
print is_array($this); //false, $this isn't an array
print get_object_vars($this); //true, $this's variables are an array
print is_object($this); //true, $this is still an object
print get_class($this); //YourProject\YourFile\YourClass
print get_parent_class($this); //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
print_r($this); //delicious data dump of $this
print $this->yourvariable //access $this variable with ->
Dolayısıyla $this
sözde değişken, Mevcut Nesnenin yöntemine ve özelliklerine sahiptir. Böyle bir şey kullanışlıdır çünkü sınıf içindeki tüm üye değişkenlere ve üye yöntemlerine erişmenize izin verir. Örneğin:
Class Dog{
public $my_member_variable; //member variable
function normal_method_inside_Dog() { //member method
//Assign data to member variable from inside the member method
$this->my_member_variable = "whatever";
//Get data from member variable from inside the member method.
print $this->my_member_variable;
}
}
$this
Object
yorumlayıcı tarafından sizin için oluşturulmuş, değişkenler dizisi içeren bir PHP'ye referanstır .
$this
Normal bir sınıfta normal bir yöntemin içinde arama yaparsanız , $this
o yöntemin ait olduğu Object'i (sınıf) döndürür.
$this
Bağlamın üst Nesnesi yoksa tanımsız olması mümkündür .
php.net, PHP nesne yönelimli programlama ve $this
bağlama bağlı olarak nasıl davranacağı hakkında büyük bir sayfaya sahiptir .
https://www.php.net/manual/en/language.oop5.basic.php
Eski sorusunu biliyorum, yine de $ this hakkında başka bir kesin açıklama . $ bu , esas olarak bir sınıfın özelliklerini belirtmek için kullanılır.
Misal:
Class A
{
public $myname; //this is a member variable of this class
function callme() {
$myname = 'function variable';
$this->myname = 'Member variable';
echo $myname; //prints function variable
echo $this->myname; //prints member variable
}
}
çıktı:
function variable
member variable
Bu, diğer birçok nesne yönelimli dilde olduğu gibi, kendi içinden bir sınıfın bir örneğine gönderme yapmanın yoludur.
Gönderen PHP docs :
Sözde değişken $ this, bir yöntem bir nesne bağlamından çağrıldığında kullanılabilir. $ bu, çağıran nesneye bir referanstır (genellikle yöntemin ait olduğu nesne, ancak yöntem ikincil bir nesnenin bağlamından statik olarak çağrılmışsa muhtemelen başka bir nesne).
$ This kullanmazsak ve aşağıdaki kod parçacığı ile aynı ada sahip örnek değişkenleri ve yapıcı argümanları sağlamaya çalışırsak ne olacağını görelim.
<?php
class Student {
public $name;
function __construct( $name ) {
$name = $name;
}
};
$tom = new Student('Tom');
echo $tom->name;
?>
Yankılanmıyor ama
<?php
class Student {
public $name;
function __construct( $name ) {
$this->name = $name; // Using 'this' to access the student's name
}
};
$tom = new Student('Tom');
echo $tom->name;
?>
bu 'Tom' yankılanıyor
$this
İkinci kurucuda kullanarak onu düzelttim .
$name
Tom'dur, ancak işlevin dışında herhangi bir değeri yoktur, çünkü kapsamı işlevin kapsamı ile sınırlıdır.
Bir sınıf oluşturduğunuzda (çoğu durumda) örnek değişkenleriniz ve yöntemleriniz (diğer adıyla işlevler) vardır. $ this, bu örnek değişkenlerine erişir, böylece işlevleriniz bu değişkenleri alabilir ve onlarla istediğinizi yapmak için ihtiyaç duydukları şeyi yapabilir.
meder örneğinin başka bir versiyonu:
class Person {
protected $name; //can't be accessed from outside the class
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
// this line creates an instance of the class Person setting "Jack" as $name.
// __construct() gets executed when you declare it within the class.
$jack = new Person("Jack");
echo $jack->getName();
Output:
Jack
$this
bir arama nesnesine bir referans (metot a ikincil nesne bağlamından statik olarak adlandırılır, bu yöntem ait olduğu, genellikle nesnenin, fakat muhtemelen bir başka amacı,).
$ bu özel bir değişkendir ve aynı nesneye, yani. kendisi.
aslında mevcut sınıfın örneğini ifade eder
işte yukarıdaki ifadeyi temizleyecek bir örnek
<?php
class Books {
/* Member variables */
var $price;
var $title;
/* Member functions */
function setPrice($par){
$this->price = $par;
}
function getPrice(){
echo $this->price ."<br/>";
}
function setTitle($par){
$this->title = $par;
}
function getTitle(){
echo $this->title ." <br/>";
}
}
?>
Bu uzun ayrıntılı bir açıklamadır. Umarım bu yeni başlayanlara yardımcı olur. Bunu çok basitleştireceğim.
Önce bir sınıf oluşturalım
<?php
class Class1
{
}
Sadece ?>
php kodunu kullanıyorsanız , php kapanış etiketini atlayabilirsiniz .
Şimdi içerisine özellikler ve bir yöntem ekleyelim Class1
.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
Özellik sadece basit bir değişkendir, ancak ona bir sınıfın içinde olduğu için özellik adını veriyoruz.
Yöntem sadece basit bir işlevdir, ancak yöntemin de bir sınıf içinde olduğunu söylüyoruz.
public
Yöntem veya özellik her yerdeki komut ulaşılabilir anlamına anahtar sözcük.
Şimdi, içindeki özellikleri ve yöntemi nasıl kullanabiliriz Class1
?
Cevap, bir örnek veya nesne oluşturmaktır, bir nesneyi sınıfın bir kopyası olarak düşünün.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
$object1 = new Class1;
var_dump($object1);
Tüm içeriği ile $object1
kopyası olan bir nesne yarattık Class1
. Ve biz tüm içeriğini dökülüyor $object1
kullanarak var_dump()
.
Bu sana verecek
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Tüm içerikleri Yani Class1
içindedir $object1
hariç, Method1
i nesneleri damping ederken yöntemleri göstermiyor neden bilmiyorum.
Şimdi ya $property1
sadece erişmek istiyorsak . Çok basit, yaptık var_dump($object1->property1);
, yeni ekledik ->property1
, işaret ettik.
biz de erişebiliriz Method1()
, yaparız var_dump($object1->Method1());
.
Şimdi $property1
içeriden erişmek istediğimi varsayalım Method1()
, bunu yapacağım
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
$object2 = new Class1;
return $object2->property1;
}
}
$object1 = new Class1;
var_dump($object1->Method1());
Yarattığımız $object2 = new Class1;
yeni bir kopyasını olan Class1
ya da biz bir örneğini söyleyebiliriz. Sonra işaret property1
dan$object2
return $object2->property1;
Bu string(15) "I am property 1"
tarayıcıda yazdırılacaktır .
Şimdi bunu içeride yapmak yerine Method1()
$object2 = new Class1;
return $object2->property1;
Biz bunu yaparız
return $this->property1;
$this
Nesne sınıfının kendisine atıfta sınıf içinde kullanılır.
Yeni bir nesne oluşturmak ve sonra onu bu şekilde döndürmek için bir alternatiftir
$object2 = new Class1;
return $object2->property1;
Başka bir örnek
<?php
class Class1
{
public $property1 = 119;
public $property2 = 666;
public $result;
public function Method1()
{
$this->result = $this->property1 + $this->property2;
return $this->result;
}
}
$object1 = new Class1;
var_dump($object1->Method1());
Tam sayı içeren 2 özellik oluşturduk ve sonra bunları ekleyip sonucu koyduk $this->result
.
Bunu unutma
$this->property1
= $property1
=119
aynı değere sahipler .. vb
Umarım bu fikri açıklar.
Bu video dizisi size OOP konusunda çok yardımcı olacak
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Meder'in dediği gibi, mevcut sınıfın örneğini ifade eder .
PHP Belgelerine bakın . İlk örnek altında açıklanmıştır.