new static() 和 new self() 的区别异同,staticself_PHP教程

WBOY
Libérer: 2016-07-13 10:20:15
original
949 Les gens l'ont consulté

new static() 和 new self() 的区别异同,staticself

长夜漫漫啊!

今天领导本地搭建一个站。发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,领导让苦逼我更改在5.2下能运行。

改着改着发现了一个地方

<span>return</span> <span>new</span> <span>static</span>(<span>$val</span>);
Copier après la connexion

这尼玛是神马,只见过

<span>return</span> <span>new</span> self(<span>$val</span>);
Copier après la connexion

于是上网查了下,他们两个的区别。

self - 就是这个类,是代码段里面的这个类。

static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。

还是看看老外的专业解释吧。

self refers to the same class whose method the new operation takes place in.

static in PHP 5.3's late static bindings refers to whatever class in the hierarchy which you call the method on.

In the following example, B inherits both methods from A. self is bound to A because it's defined in A's implementation of the first method, whereas static is bound to the called class (also see <span><span>get_called_class()</span></span> ).

<span>class</span><span> A {
    </span><span>public</span> <span>static</span> <span>function</span><span> get_self() {
        </span><span>return</span> <span>new</span><span> self();
    }

    </span><span>public</span> <span>static</span> <span>function</span><span> get_static() {
        </span><span>return</span> <span>new</span> <span>static</span><span>();
    }
}

</span><span>class</span> B <span>extends</span><span> A {}

</span><span>echo</span> <span>get_class</span>(B::get_self());  <span>//</span><span> A</span>
<span>echo</span> <span>get_class</span>(B::get_static()); <span>//</span><span> B</span>
<span>echo</span> <span>get_class</span>(A::get_static()); <span>//</span><span> A</span>
Copier après la connexion

这个例子基本上一看就懂了吧。

原理了解了,但是问题还没有解决,如何解决掉 return new static($val); 这个问题呢?

其实也简单就是用 get_class($this); 如下

<span>class</span><span> A {
    </span><span>public</span> <span>function</span><span> create1() {
        </span><span>$class</span> = <span>get_class</span>(<span>$this</span><span>);<br /></span><span>    return</span> <span>new</span> <span>$class</span><span>();
    }
    </span><span>public</span> <span>function</span><span> create2() {
        </span><span>return</span> <span>new</span> <span>static</span><span>();
    }
}

</span><span>class</span> B <span>extends</span><span> A {

}

</span><span>$b</span> = <span>new</span><span> B();
</span><span>var_dump</span>(<span>get_class</span>(<span>$b</span>->create1()), <span>get_class</span>(<span>$b</span>-><span>create2()));

</span><span>/*</span><span>
The result 
string(1) "B"
string(1) "B"
</span><span>*/</span>
Copier après la connexion

 

C++ new与new[]的不同?

东西多了点。呵呵。帮你详细说一下。
1. new和new[]的区别
new 用于单个对象或实例的创建,就是调用类的构造函数。
new [] 用于创建对象或实例的数组实例,并且地址是连续的。(内存分配的时候有可能不连续,但地址链表是连续的。)
2. 虚函数(这个没办法说,只能举例子)
class person
{
public :
virtual say();
}
class techer : public person
{
public :
protected override say();
}
class student : public person
{
public :
protected override say();
}
第三个没理解什么意思。
前面两个不知道你看懂没有。没有的话联系我。
 

JAVA中 static A a=new A() 这static 有什用?具体点

在java中
public static void main(String args[])这句话是一个主方法,
java程序可以有多个方法,但是主方法只能有一个,
用ststic修饰的方法称为类方法(main也是类方法)。
A a=new A()是创建一个实例对象 static 起的是修饰作用
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/867540.htmlTechArticlenew static() 和 new self() 的区别异同,staticself 长夜漫漫啊! 今天领导本地搭建一个站。发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上...
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal