在 PHP 中,有什么区别:
- 常量和静态变量?
- 扩展一个类并创建它的对象?
我知道如何使用它们,但我无法清楚地区分它们。
在 PHP 中,有什么区别:
我知道如何使用它们,但我无法清楚地区分它们。
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";
声明时无需初始化。
public static $variable_name;
应用普通变量声明规则(例如:以 $ 开头)
可以在函数内部创建。
class A{
function my_function(){
static $val = 12;
echo ++$val; //13
}
}
Always public 不能放置访问修饰符(>PHP7.1)
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 = "cannot change"; //produce a parse error
声明时必须初始化。
class A{
const my_constant = "constant value";// Fine
const wrong_constant;// produce a parse error
}
不得在变量开头使用 $(适用其他变量规则)。
class A{
const my_constant = "constant value";// Fine
const $wrong_constant="wrong";// produce a parse error
}
不能在函数内部声明。
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++
,例如,如果您执行where $i
is static
variable 。
至于extending a class and creating its object
,这称为继承,请查看此帖子以了解更多信息:
一个重要的区别是内存分配。
创建类(对象)的实例时,会为新创建的对象分配内存。静态名称是根据内存分配的性质命名的。也就是说,静态对象的内存只分配一次,是静态的。当一个对象改变它的静态属性时,它会反映在同一类的所有对象上。
<?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 开销)。
常量变量对于每个对象都是独立的。但是静态变量对于该类的所有对象都是通用的。每个对象共享一个静态变量。在类级别创建的静态变量。在实例级别创建的常量变量。