PHP OOP - 常量与静态变量?

pMa*_*Man 6 php inheritance constants static-variables

在PHP中,有什么区别:

  1. 常量和静态变量?
  2. 扩展一个类并创建它的对象?

我知道如何使用它们,但我无法清楚地区分它们.

Ntw*_*ike 23

对照

静态的

  1. 可以有一个访问修饰符.

    class A{
        public static $public_static = "can access from anywhere";
        protected static $protected_static = "can access from inheriting classes";
        private static $private_static = "can access only inside the class";
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 根据可见性,您可以访问静态变量.

    //inside the class
        self::$variable_name;
        static::$variable_name;
    //outside the class
        class_name::$variable_name;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 声明后可以更改值.

        self::$variable_name = "New Value";
        static::$variable_name = "New Value";
    
    Run Code Online (Sandbox Code Playgroud)
  4. 声明时无需初始化.

        public static $variable_name; 
    
    Run Code Online (Sandbox Code Playgroud)
  5. 应用正常变量声明规则(例如:以$开头)

  6. 可以在函数内部创建.

        class A{
            function my_function(){
                 static $val = 12;
                 echo ++$val; //13
            }
        }
    
    Run Code Online (Sandbox Code Playgroud)

不变

  1. 始终公开不能放置访问修饰符.

    class A{
        const my_constant = "constant value";
        public const wrong_constant="wrong" // produce a parse error
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您可以访问的任何地方.

    //inside the class
        self::variable_name;
        static::variable_name;
    //outside the class
        class_name::variable_name;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 声明后无法更改值.

    self::variable_name = "cannot change"; //produce a parse error
    
    Run Code Online (Sandbox Code Playgroud)
  4. 声明时必须初始化.

    class A{
        const my_constant = "constant value";// Fine
        const wrong_constant;// produce a parse error
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 不得在变量的开头使用$(应用其他变量规则).

     class A{
        const my_constant = "constant value";// Fine
        const $wrong_constant="wrong";// produce a parse error
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. 无法在函数内声明.


扩展时

    class A{

        public static $public_static = "can access from anywhere";
        protected static $protected_static = "can access from inheriting classes";
        private static $private_static = "can access only inside the class";

        const my_constant = "Constant value";
    }

    class B extends A{

        function output(){

            // you can use self or static

            echo self::$public_static; //can access from anywhere;
            echo self::$protected_static; //can access from inheriting classes;
            self::$protected_static = "Changed value from Class B";
            echo self::$protected_static; //"Changed value from Class B";

            echo self::$private_static; //Produce Fatal Error

            echo self::my_constant;//Constant value
        }
    }
Run Code Online (Sandbox Code Playgroud)


Pas*_*Qyy 11

静态 适用于:

类属性或方法作为静态使它们可以访问而无需实例化类

因此,静态成员返回的值可能不同.例如,您可以根据传递给它的参数调用具有不同结果的静态方法.

数值:

必须是常量表达式,而不是(例如)变量,属性,数学运算的结果或函数调用.

因此,当您调用它时,它始终返回相同的结果

关于创建对象和扩展类,当您"创建对象"时,您可以创建的实例.当你扩展一个类,创建一个类其他谁:

从父类继承所有公共和受保护的方法.除非某个类重写这些方法,否则它们将保留其原始功能.

我希望它对你有所帮助.


Sar*_*raz 6

常量是常量,一旦分配就不能改变它的值.另一方面,静态变量可以具有不同的值.例如,您可以在函数内创建静态变量,以了解调用函数的时间.将值改变 ,如果你做的每一次函数被调用比如$i++哪里$istatic可变的.

至于extending a class and creating its object这被称为继承,请查看这篇文章以了解更多信息: