色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

php new self

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

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

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

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

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

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

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

除此之外,我們還可以在類中的靜態方法中使用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可以用來在靜態和非靜態方法中創建指向當前類的新對象,而不依賴于類名。