douyan6871 2016-06-27 10:23
浏览 441
已采纳

新的Class()和ReflectionClass :: newInstance()之间的区别?

I was watching a tutorial that deals with class and objects, and I came across this line of code that was confusing.

Is there a difference between Class::newInstance() and new Class()?

I read the documentation, and it did not appear to mention anything different so I assumed it's the same?

  • 写回答

1条回答 默认 最新

  • dongli2000 2016-06-27 10:33
    关注

    The new Class() statement created a new object instance of class named Class.

    The Class::newInstance() calls a static method on class named Class. Which in your tutorial most likley will call and return new Class(). The static function newInstance needs to be present in the class. It is not native to all php objects afaik.

    This should make it clear:

    class Foo
    {
        private $bar = null;
    
        public static function newInstance($args){
            return new self($args);
        }
    
        public function __construct($bar = "nothing")
        {
            $this->bar = $bar;
        }
    
        public function foo()
        {
            echo "Foo says:" . $this->bar . "
    ";
        }
    }
    
    //create using normal new Classname Syntax
    $foo1 = new Foo("me");
    $foo1->foo();
    
    //create using ReflectionClass::newInstance
    $rf   = new ReflectionClass('Foo');
    $foo2 = $rf->newInstance();
    $foo2->foo();
    
    //create using refelction and arguments
    $foo3= $rf->newInstanceArgs(["happy"]);
    $foo3->foo();
    
    //create using static function 
    $foo4 = Foo::newInstance("static");
    $foo4->foo();
    

    Will output:

    Foo says:me
    Foo says:nothing
    Foo says:happy
    Foo says:static
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部