繁体   English   中英

PHP OOP - 常量与静态变量?

[英]PHP OOP - constant vs static variables?

在PHP中,有什么区别:

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

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

对照

静态的

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

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

      self::$variable_name = "New Value"; static::$variable_name = "New Value"; 
  4. 声明时无需初始化。

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

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

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

不变

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

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

     //inside the class self::variable_name; static::variable_name; //outside the class class_name::variable_name; 
  3. 声明后无法更改值。

     self::variable_name = "cannot change"; //produce a parse error 
  4. 声明时必须初始化。

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

      class A{ const my_constant = "constant value";// Fine const $wrong_constant="wrong";// produce a parse error } 
  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
        }
    }

静态适用于:

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

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

数值:

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

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

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

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

我希望它对你有所帮助。

常量是常量,一旦分配就不能改变它的值。 另一方面,静态变量可以具有不同的值。 例如,您可以在函数内创建静态变量,以了解调用函数的时间。 每次调用函数时,该值都会改变,例如,如果你执行$i++ ,其中$istatic变量。

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

一个重要的区别是内存分配。

创建类(对象)的实例时,将为新创建的对象分配内存。 名称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)

您想要使用静态成员变量/函数的原因是因为您可以提取有关该类的信息而无需创建它的实例(这会降低您的CPU开销)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM