찾다

 >  Q&A  >  본문

php mysqli中->和::有什么区别?

我看到有两种不同的写法,不知道这二者有什么区别?

mysqli->commit
mysqli::commit
PHP中文网PHP中文网2897일 전373

모든 응답(2)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-10 14:25:59

    ->用来访问实例的成员,一般左面是一个类实例(或者$this), 右面是一个函数或者属性. 箭头也可以通过类实例来访问静态函数.

    ::用来访问静态成员、常量,访问父类中的成员. 一般左面是一个类名,或selfparentstatic关键字, 右面是一个静态函数、静态属性、常量.

    <?php
    
    // 费了我好大功夫, 把这些都总结到一个例子里面了
    // PHP5.3 PHP5.4 PHP5.5 测试通过
    
    class A
    {
        //类常量
        const constValue = "constValue\n";
    
    	//类属性
        public $property = "properties\n";
    
        //静态属性
        static public $staticProperty = "staticProperty\n";
    
        //普通函数
        public function func()
        {
    
        }
    
        //静态函数
        static public function staticFunc()
        {
    
        }
    }
    
    $xxoo = new A;
    //访问实例的属性
    print $xxoo->property;
    //访问实例的函数
    print $xxoo->func();
    
    //也可以借助实例来访问静态成员
    //访问函数要用箭头,属性要用双冒号
    print $xxoo->staticFunc();
    print $xxoo::$staticProperty;
    
    //如果不借助实例,那就直接用类名加双冒号
    print A::staticFunc();
    print A::constValue;
    //静态属性要加美元符号
    print A::$staticProperty;
    
    
    
    //继承类A
    class B extends A
    {
        //覆盖父类的属性
    	public $property = "covered-properties\n";
    
        //覆盖父类的静态属性
    	static public $staitcProperty = "covered-staitcProperties\n";
    
        //覆盖父类的函数
        public function func()
        {
    		//访问自己的属性
            print $this->property;
    		//访问从父类继承来的静态属性
            print self::$staticProperty;
    
    		//访问自己的(静态)函数
            print $this->staticFunc();
            //强制指定访问父类(而不是自己)的函数
            print parent::func();
        }
    
        //覆盖父类的静态函数
        static public function staticFunc()
        {
            //因为没有$this, 所以用self访问自己的静态属性
            print self::$staitcProperty;
        }
    }
    
    //运行一下上面的例子
    $xxoo = new B;
    $xxoo->func();
    B::staticFunc();

    总结:
    箭头:通过实例访问属性、(静态)函数
    双冒号:通过类名或selfparentstatic关键字,访问常量、静态属性、静态函数

    http://php.net/manual/zh/language.oop...
    PHP5.3新增后期静态绑定功能,和双冒号以及static关键字有关,这个我正在学习中.....

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-10 14:25:59

    mysqli::commit 没有这种用法的,php文档里这样表示的意思是commitmysqli对象 的一个成员方法而不是 mysqli 这个类的静态方法

    회신하다
    0
  • 취소회신하다