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.
$thisPHP'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 $thissö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;
}
}
$thisObjectyorumlayıcı tarafından sizin için oluşturulmuş, değişkenler dizisi içeren bir PHP'ye referanstır .
$thisNormal bir sınıfta normal bir yöntemin içinde arama yaparsanız , $thiso yöntemin ait olduğu Object'i (sınıf) döndürür.
$thisBağlamın üst Nesnesi yoksa tanımsız olması mümkündür .
php.net, PHP nesne yönelimli programlama ve $thisbağ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 .
$nameTom'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
$thisbir 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.
publicYö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 $object1kopyası olan bir nesne yarattık Class1. Ve biz tüm içeriğini dökülüyor $object1kullanarak 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 Class1içindedir $object1hariç, Method1i nesneleri damping ederken yöntemleri göstermiyor neden bilmiyorum.
Şimdi ya $property1sadece 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 $property1iç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 Class1ya da biz bir örneğini söyleyebiliriz. Sonra işaret property1dan$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;
$thisNesne 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.