PHP5:常量与静态

在PHP5中,使用conststatic什么区别? 什么时候适合? 如果有的话, publicprotectedprivate游戏扮演什么angular色?

在类的上下文中,静态variables位于类作用域(而不是对象)范围内,但与常量不同,它们的值可以更改。

 class ClassName { static $my_var = 10; /* defaults to public unless otherwise specified */ const MY_CONST = 5; } echo ClassName::$my_var; // returns 10 echo ClassName::MY_CONST; // returns 5 ClassName::$my_var = 20; // now equals 20 ClassName::MY_CONST = 20; // error! won't work. 

公共的,被保护的和私人的在常量(总是公开的)方面是无关紧要的; 它们只对类variables有用,包括静态variables。

  • 公共静态variables可以通过ClassName :: $variables访问。
  • 受保护的静态variables可以通过定义类或通过ClassName :: $ variable扩展类访问。
  • 私有静态variables只能通过ClassName :: $ variable的定义类访问。

最后一点应该做的是一个const永远是静态的和公共的。 这意味着你可以像这样访问类中的const:

 class MyClass { const MYCONST = true; public function test() { echo self::MYCONST; } } 

从课外你可以这样访问它:

 echo MyClass::MYCONST; 

常量只是一个常量,即你声明后不能改变它的值。

静态variables可以在不创build类的实例的情况下访问,因此可以在类的所有实例之间共享。

另外,函数中只能声明一次(在函数的第一次执行时)可以有一个静态局部variables,并且可以在函数调用之间存储它的值,例如:

 function foo() { static $numOfCalls = 0; $numOfCalls++; print("this function has been executed " . $numOfCalls . " times"); } 

声明一个类方法或属性为静态的,使得它们不需要类的实例化即可访问。

类常量就像常量一样,在运行时不能改变。 这也是你将会使用const的唯一原因。

私有,公共和受保护的访问修饰符描述谁可以访问哪个参数/方法。

公共意味着所有其他对象都可以访问。 私有意味着只有实例化的类才能访问。 受保护意味着实例化的类和派生类可以访问。

所以要回顾@Matt伟大的答案:

  • 在大多数情况下,您将需要私有/受保护的静态属性,因此常量不是一个选项。

  • 如果你需要的财产是公开的,但没有改变,那么一个常数是正确的select。

例:

 class User{ private static $PASSWORD_SALT = "ASD!@~#asd1"; ... } class Product{ const INTEREST = 0.10; ... } 

在谈论类inheritance时,可以通过使用selfstatic关键字来区分不同范围内的常量或variables。 检查这个例子说明如何访问:

 class Person { static $type = 'person'; const TYPE = 'person'; static public function getType(){ var_dump(self::TYPE); var_dump(static::TYPE); var_dump(self::$type); var_dump(static::$type); } } class Pirate extends Person { static $type = 'pirate'; const TYPE = 'pirate'; } 

然后做:

 $pirate = new Pirate(); $pirate::getType(); 

要么:

 Pirate::getType(); 

输出:

 string(6) "person" string(6) "pirate" string(6) "person" string(6) "pirate" 

这是我迄今为止学到的有关静态成员,常量variables和访问修饰符(私有,公共和受保护)的内容。 不变

定义

就像这个名字说的那样,一个常量variables的值不能被改变。常量不同于正常variables,因为你不使用$符号来声明或者使用它们。

该值必须是常量expression式,而不能是(例如)variables,属性,math运算的结果或函数调用。

注意:variables的值不能是关键字(例如self,parent和static)。

在php中声明一个常量

 <?php class constantExample{ const CONSTANT = 'constant value'; //constant } ?> 

常量的作用域是全局的,可以使用self关键字来访问

 <?php class MyClass { const CONSTANT = 'constant value'; function showConstant() { echo self::CONSTANT . "\n"; } } echo MyClass::CONSTANT . "\n"; $classname = "MyClass"; echo $classname::CONSTANT . "\n"; // As of PHP 5.3.0 $class = new MyClass(); $class->showConstant(); echo $class::CONSTANT."\n"; // As of PHP 5.3.0 ?> 

静态的

定义

静态关键字可用于声明类,成员函数或variables。类中的静态成员是全局的,也可以使用self关键字进行访问。将类的属性或方法声明为静态,使得它们无需实例化即可访问。 声明为静态的属性不能通过实例化的类对象来访问(虽然可以使用静态方法)。 如果没有使用可见性声明(public,private,protected),那么该属性或方法将被视为public声明。因为静态方法可以被调用而没有创build对象的实例。

注意:伪variables$ this在声明为static的方法内部是不可用的。使用箭头运算符无法通过对象访问静态属性 – >

从PHP 5.3.0开始,可以使用variables来引用类。 >variables的值不能是关键字(例如self,parent和static)。

静态属性的例子

 <?php class Foo { public static $my_static = 'foo'; //static variable public static function staticValue() { //static function example return self::$my_static; //return the static variable declared globally } } ?> 

访问静态属性和function的例子

  <?php print Foo::$my_static . "\n"; $foo = new Foo(); print $foo->staticValue() . "\n"; print $foo->my_static . "\n"; // Undefined "Property" my_static print $foo::$my_static . "\n"; $classname = 'Foo'; print $classname::$my_static . "\n"; // As of PHP 5.3.0 print Bar::$my_static . "\n"; $bar = new Bar(); print $bar->fooStatic() . "\n"; ?> 

公共,私人,保护(AKA访问修饰符)

在阅读下面的定义之前,请阅读关于封装的文章,这将有助于您更深入地理解这个概念

链接1维基百科

教程点封装链接

定义

使用私人,公共,受保护的关键字,您可以控制对class级成员的访问。 宣布公开的类成员可以随处访问。 声明保护的成员只能在类本身以及inheritance类和父类中访问。 声明为私有的成员只能由定义该成员的类访问。

  <?php class Example{ public $variable = 'value'; // variable declared as public protected $variable = 'value' //variable declared as protected private $variable = 'value' //variable declared as private public function functionName() { //public function //statements } protected function functionName() { //protected function //statements } private function functionName() { //private function //statements } } ?> 

访问公共,私人和保护成员的例子

公共variables可以从课外或课堂内部进行访问和修改。 但是您只能从类内部访问私有和受保护的variables和函数,您不能修改类之外的受保护或公共成员的值。

  <?php class Example{ public $pbVariable = 'value'; protected $protVariable = 'value'; private $privVariable = 'value'; public function publicFun(){ echo $this->$pbVariable; //public variable echo $this->$protVariable; //protected variable echo $this->privVariable; //private variable } private function PrivateFun(){ //some statements } protected function ProtectedFun(){ //some statements } } $inst = new Example(); $inst->pbVariable = 'AnotherVariable'; //public variable modifed from outside echo $inst->pbVariable; //print the value of the public variable $inst->protVariable = 'var'; //you can't do this with protected variable echo $inst->privVariable; // This statement won't work , because variable is limited to private $inst->publicFun(); // this will print the values inside the function, Because the function is declared as a public function $inst->PrivateFun(); //this one won't work (private) $inst->ProtectedFun(); //this one won't work as well (protected) ?> 

欲了解更多信息阅读这个PHP文档有关可见性可见性PHP文档

参考: php.net

我希望你能理解这个概念。 感谢阅读:) :)有一个很好的