PHP OOP-常量与静态变量?

PHP OOP-常量与静态变量?,php,inheritance,constants,static-variables,Php,Inheritance,Constants,Static Variables,在PHP中,以下各项之间的区别是什么: 常量和静态变量 扩展类并创建其对象 我知道如何使用它们,但我不能清楚地区分它们。常量是常量,一旦赋值,就不能更改其值。另一方面,静态变量可以有不同的值。例如,您可以在函数中创建一个静态变量,以了解调用该函数的次数。每次调用函数时,该值都会发生变化,例如,如果执行$i++,其中$i是静态变量 至于扩展类并创建其对象,这称为继承,请查看本文了解更多信息: 常量变量是一个可以通过类名访问的变量,在脚本执行期间不能更改。类静态变量也可以通过类名访问,但可以在程

在PHP中,以下各项之间的区别是什么:

  • 常量和静态变量
  • 扩展类并创建其对象

  • 我知道如何使用它们,但我不能清楚地区分它们。

    常量是常量,一旦赋值,就不能更改其值。另一方面,静态变量可以有不同的值。例如,您可以在函数中创建一个静态变量,以了解调用该函数的次数。每次调用函数时,该值都会发生变化,例如,如果执行
    $i++
    ,其中
    $i
    静态变量

    至于
    扩展类并创建其对象
    ,这称为继承,请查看本文了解更多信息:


    常量变量是一个可以通过类名访问的变量,在脚本执行期间不能更改。类静态变量也可以通过类名访问,但可以在程序执行期间更改

    第二个问题——这完全是另外一回事。阅读更多有关面向对象编程(不仅仅是PHP)的信息。

    用于:

    将属性或方法作为静态类使它们可以访问,而不需要类的实例化

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

    价值:

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

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

    关于创建对象和扩展类,当您“创建对象”时,您将创建一个实例。在创建时,您创建了另一个类,该类:

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


    我希望它能对您有所帮助。

    您希望使用静态成员变量/函数的原因是,您可以提取有关该类的信息,而无需创建该类的实例(这会减少CPU开销)

    比较 静止的
  • Can具有访问修饰符

    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";
    }
    
  • 根据可见性,您可以访问静态变量

    //inside the class
        self::$variable_name;
        static::$variable_name;
    //outside the class
        class_name::$variable_name;
    
  • 可以在声明后更改值

        self::$variable_name = "New Value";
        static::$variable_name = "New Value";
    
    self::variable_name = "cannot change"; //produce a parse error
    
  • 声明时不需要初始化

        public static $variable_name; 
    
    class A{
        const my_constant = "constant value";// Fine
        const wrong_constant;// produce a parse error
    }
    
  • 应用的普通变量声明规则(例如:以$开头)

  • 可以在函数内部创建

        class A{
            function my_function(){
                 static $val = 12;
                 echo ++$val; //13
            }
        }
    

  • 常数
  • 始终公共不能放置访问修饰符

    class A{
        const my_constant = "constant value";
        public const wrong_constant="wrong" // produce a parse error
    }
    
  • 任何可以访问常量的地方

    //inside the class
        self::variable_name;
        static::variable_name;
    //outside the class
        class_name::variable_name;
    
  • 无法更改声明后的值

        self::$variable_name = "New Value";
        static::$variable_name = "New Value";
    
    self::variable_name = "cannot change"; //produce a parse error
    
  • 必须在声明时初始化

        public static $variable_name; 
    
    class A{
        const my_constant = "constant value";// Fine
        const wrong_constant;// produce a parse error
    }
    
  • 不得在变量开头使用$(应用其他变量规则)

  • 无法在函数内声明

        class A{
            function my_function(){
                 static $val = 12;
                 echo ++$val; //13
            }
        }
    

  • 延伸时
    一个重要的区别是内存分配

    创建类(对象)的实例时,会为新创建的对象分配内存。名称static在内存分配的性质之后。也就是说,静态对象的内存只能静态分配一次。当对象更改其静态属性时,它会反映在同一类的所有对象上

    <?php
    class Test {
        static $test = "world!";
        static function hello() {
            echo "\nhello " . self::$test . "\n";
        }
    }
    
    $t = new Test();
    $x = new Test();
    
    $t->hello(); // prints 'hello world!'
    $t::$test = "Hmmm...";
    $t->hello(); // prints 'hello Hmmm...'
    $x->hello(); // prints 'hello Hmmm...'
    

    常量变量对于每个对象都是独立的。
    但静态变量对于该类的所有对象都是通用的。
    每个对象共享一个静态变量。
    在类级别创建的静态变量。
    
    常量变量是在实例级别创建的。

    我将首先参考PHP和OO文档,因为这些是非常基本的问题。因为局部静态变量与静态(或常量)类属性不同,所以正在比较苹果和桔子。它们只存在于该函数/方法中。不能使用对象中的常量吗?(而是从类中)您不能访问类外的常量,但请注意,从PHP7.1开始,常量允许访问修饰符,因此可以有:
    private const my_constant=“常量值”