欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php new self

傅智翔1年前7瀏覽0評論

在PHP中,我們會經常使用對象的概念,對象往往都會有一些成員變量和方法。在定義類的時候,我們常常需要用到self和$this。其中,self是指向類本身的指針,而$this則是指向當前對象的指針。但是,在某些情況下,我們并不想讓$this指向當前對象,這個時候,就可以用到new self。

舉個例子,如果我們有這樣一個父類:

class ParentClass {
public function getName() {
return "ParentClass";
}
}

現(xiàn)在,我們定義了一個子類ChildClass,其中有一個成員方法getSelfName():

class ChildClass extends ParentClass {
public function getSelfName() {
return self::getName();
}
}

那么,getSelfName()方法會返回什么呢?如果我們在子類中使用$this->getName(),那么返回的就是子類的名字"ChildClass"。但是,如果我們使用self::getName(),那么就會返回父類的名字"ParentClass"。因為self指向類本身,而子類繼承了父類的getName()方法,所以在子類中調用self::getName()實際上就是在調用父類的方法。

除此之外,我們還可以在類中的靜態(tài)方法中使用new self。比如:

class ExampleClass {
public static function getNewObject() {
return new self();
}
}

在這個例子中,getNewObject()方法會返回一個ExampleClass的實例。如果我們在這個方法中使用new ExampleClass(),那么返回的也是一個ExampleClass的實例。但是,如果我們想讓這個方法可以被子類繼承并重寫,同時又想在子類中返回一個子類自身的實例,那么就可以使用new self()的方式。比如:

class ChildExampleClass extends ExampleClass {
public static function getNewObject() {
return new self();
}
}

在這個例子中,ChildExampleClass繼承了ExampleClass,并重寫了getNewObject()方法,方法中使用了new self()的方式返回一個子類自身的實例。

總結一下,new self可以用來在靜態(tài)和非靜態(tài)方法中創(chuàng)建指向當前類的新對象,而不依賴于類名。