search

Home  >  Q&A  >  body text

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

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

1

2

mysqli->commit

mysqli::commit

PHP中文网PHP中文网2896 days ago368

reply all(2)I'll reply

  • 怪我咯

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

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

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    <?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关键字有关,这个我正在学习中.....

    reply
    0
  • 高洛峰

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

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

    reply
    0
  • Cancelreply