关闭

对比 PHP 中 new static() 与 new self()

时间: 2019-01-28阅读: 932标签: php

通过new static()与new self()都能产生实例对象,new static()是在php5.3版本中引入的新特性,本文对二者稍作对比。


一、当直接通过本类创建实例时

class Test
{
    public static function getIns()
    {
        $obj1 = new self();
        $obj2 = new static();
        return [$obj1, $obj2];
    }
}
$arr = Test::getIns();
var_dump(get_class($arr[0]) === get_class($arr[1])); // true

通过以上代码可知,当直接从同一个类创建对象时,二者相同。


二、当子类继承父类创建对象时

class Test
{
    public static function getIns()
    {
        $obj1 = new self();
        $obj2 = new static();
        return [$obj1, $obj2];
    }
}
class Test1 extends Test
{
    
}
class Test2 extends Test
{

}
$arr1 = Test1::getIns();
echo ‘Test1类继承Test类通过self产生实例的类名: ‘, get_class($arr1[0]), ‘<br>‘;    // Test
echo ‘Test1类继承Test类通过static产生实例的类名: ‘, get_class($arr1[1]), ‘<hr>‘;  // Test1
$arr2 = Test2::getIns();
echo ‘Test2类继承Test类通过self产生实例的类名: ‘, get_class($arr2[0]), ‘<br>‘;    // Test
echo ‘Test2类继承Test类通过static产生实例的类名: ‘, get_class($arr2[1]);          // Test2

通过以上代码可知,当子类继承父类的情况下,self与static有所不同: 

1、new self() 无论是子类还是父类谁调用,都指向被定义时它所在的类。
2、new static() 则由调用者决定,哪个类调用就指向哪个类。


总结:通过对比可知,new self() 与 new static() 区别在于是否继承,如果没胡继承则二者效果相同,如果有继承,则self仍指向被定义时的类,而static则指向调用者的类。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1898

关闭

php判断远程文件是否存在

php判断本地文件是否存在可以简单的使用is_file就可以实现。但是在部分情况下会检测远程文件是否存在,实现方式如下

php中0,空,null和false的区别

null为不存在之意:php底层的zval空间里(结构见下方)没有存其value值,只存储了一个type标志其 IS_NULL(所以解释了 empty(null)=true,isset(null)=false ,isset(‘‘)=true)

php.ini配置详解

apache在启动时php.ini被读取。对于服务器模块版本的php,仅在web服务器启动时读取一次。对于CGI和CLI版本,每次调用都会被读取,Apache Web服务器在启动时会把目录转到根目录

可以提高php编程效率的20个要点

整理了可以提高php编程效率的20个要点,发博客记录一下,需要的朋友可以参考。还有,用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP源码会在双引号包围的字符串中搜寻变量

php中Url几个常用的函数

parse_url()本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。

PHP的高效率写法

尽量静态化;如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。echo的效率高于print,因为echo没有返回值,print返回一个整型;在循环之前设置循环的最大次数,而非在在循环中;

php中require与include的区别

require, include三者都是引入文件,其中require_once,include_once只引入一次,即之前引入过的就不再引入。include与require都是一种语言结构,并非真正的函数。

php 定时任务

google百度了下,PHP任务大体上可以分为三类,最近需要去定时请求数据,然后分析之后 指定相应的文本 通过socket广播给用户。具体的分析 制定文本的业务 不复杂。 使用curl 请求数据 。但是对于定时任务这一块怎么使用都不行。

php回调函数的概念及实例

php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持。这两个函数的区别是call_user_func_array是以数组的形式接收回调函数的参数的。而call_user_func($callback,参数1,参数2,…)的参数个数根据回调函数的参数来确定的。

校正PHP服务器时间不准的问题

关于怎样解决PHP服务器时间不准的问题,得针对不同的情况进行不同的处理。下面是经常遇到的情况,及应对办法。方法一 如果你是管理员,直接去调整服务器的时间,只要服务器时间校正了,就没问题了。如果没法修改服务器时间,又要PHP程序显示的时间正确,那得通过PHP代码来实现。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!