如何从外部访问类变量而不在PHP
中创建新实例?事情是这样的:从外部访问类变量
class foo
{
public $bar;
}
echo foo::$bar;
是否有可能还是我必须创建方法,将打印或返回此值,并使用它或创建新实例($a = new foo; echo $a->$bar
)?
编辑:我不想创建常量,但经典的变量,将稍后改变。
如何从外部访问类变量而不在PHP
中创建新实例?事情是这样的:从外部访问类变量
class foo
{
public $bar;
}
echo foo::$bar;
是否有可能还是我必须创建方法,将打印或返回此值,并使用它或创建新实例($a = new foo; echo $a->$bar
)?
编辑:我不想创建常量,但经典的变量,将稍后改变。
成静态变量与淘汰类对象进行访问。
如果你想用方法来改变静态变量的值,那么你需要使用静态方法
你可以尝试这样的:
class foo
{
public static $bar ="google";
public static function changeVal($val){
self::$bar=$val;
}
}
foo::changeVal("changed :)");
echo foo::$bar;
输出:changed :)
你也可以这样改变它没有静态方法:
foo::$bar = "changed";
这样的:
class foo
{
public static $bar ="google";
}
echo foo::$bar;
输出:google
IF是有意义的使用静态变量:
class foo{
public static $bar = 'example';
}
哪位能像这样来访问:
echo foo::$bar;
如果该值永远不会在运行时发生变化,那么你可能想类常量(http://www.php.net/oop5.constants)
class foo {
const bar = 'abc';
}
...否则你想有一个公共静态变量(http://www.php.net/manual/en/language.oop5.static.php)
class foo {
public static $bar = 'abc';
}
...无论哪种方式,访问它像这样
echo foo::bar;
您可以访问类变量只在变量标记为静态时才创建实例:
class foo
{
public static $bar;
}
我尝试这个,但输出不正确。如果我将类内的变量设置为默认值(FALSE),并将其更改为方法并在同一位置打印值,则结果是正确的,但是如果我想要外部打印值,则结果不正确。 – JARDA001
这是你如何使用类变量:
// with instantiation
class foo {
// initialize on declare
public $bar = 1;
// or initialize in __construct()
public function __construct(){
$this->bar = 1;
}
}
$foo = new foo();
var_dump($foo->bar);
// static way
class static_foo {
public static $bar = 1;
}
var_dump(static_foo::$bar);
这就是你如何从一个随机的类名字符串变量,实例化一个类。
$foo = new foo();
$random_class_name = $foo->bar;
try {
// following line throws if class is not found
$rc = new \ReflectionClass($random_class_name);
$obj = $rc->newInstance();
// can be used with dynamic arguments
// $obj = $rc->newInstance(...);
// $obj = $rc->newInstanceArgs(array(...));
} catch(\Exception $Ex){
$obj = null;
}
if($obj){
// you have a dynamic object
}
什么是您的实际问题?
这我想用,但没有输出可见。但是如果我在方法里面改变它并且在改变方法后使用echo,我会得到正确的结果而不是从外部得到。 – JARDA001
@ JARDA001:你有没有在我的演示链接中看到?我也更新了我的答案以更改值 –
是的,我看到但我看到只有默认值,没有更改。编辑:片刻,我试试这个。 – JARDA001