PHP对象属性
我是PHP中OOP的新手,我发现下面两个表达式之间的差异很难理解PHP对象属性,php,properties,Php,Properties,我是PHP中OOP的新手,我发现下面两个表达式之间的差异很难理解 $object->$foo; $object->foo; 可能是我的错,但我在手册中找不到相关部分。第一次调用$obj->$foo使用了一个所谓的变量。选中此项: class A { public $foo = 1; } $a = new A(); $foo = 'foo'; // now you can use both echo $a->$foo; echo $a->fo
$object->$foo;
$object->foo;
可能是我的错,但我在手册中找不到相关部分。第一次调用
$obj->$foo
使用了一个所谓的变量。选中此项:
class A {
public $foo = 1;
}
$a = new A();
$foo = 'foo';
// now you can use both
echo $a->$foo;
echo $a->foo;
按照关于的手册进行操作。为了完全理解有点奇怪的
$object->$foo
,您应该了解PHP的两个方面:
变量名
PHP中的大多数时间变量都非常简单。它们以一个$
符号开头,有一个[a-zA-Z_]
字符,然后是任意数量的[a-Z-a-Z0-9_]
字符。例子包括:
$var = 'Abcdef';
$_GET = [];
$a1 = 123;
// And so on...
现在,PHP变量实际上可以被命名为几乎任何东西,只要名称是,或者可以被转换为。使用任意名称命名变量的方法是使用大括号({}
),如下所示:
${null} = 'It works'; echo ${null};
${false} = 'It works'; echo ${false};
${'!'} = 'It works'; echo ${'!'};
// Slightly weirder...
${(int)trim(' 5 ')} = 'It works'; echo ${5};
${implode(['a','b','c'])} = 'It works'; echo $abc;
重要提示:仅仅因为你能做到这一点并不意味着你应该这样做。这主要是一个奇怪的PHP,你可以做到这一点
可变变量
有点复杂的解释:变量是使用变量名访问的变量
理解变量的一个更简单的方法是使用我们刚刚学习的PHP中的变量名。举个例子:
${"abc"} = 'Abc...';
echo $abc;
我们使用字符串创建变量,“abc”
,也可以使用$abc
访问该字符串
现在,没有理由(或规则)说它必须是字符串。。。。它也可以是一个变量:
这基本上是一个变量。“实”变量不使用大括号:
$abc = 'Abc...';
$varName = 'abc';
echo $$varName; // echo $abc
至于这个问题
在这个问题中,$object->$foo
基本上只是一个“对象变量”,如果你愿意的话
$object = new stdClass;
$object->abc = 'The alphabet!';
$foo = 'abc';
echo $object->$foo;
echo $object->{$foo}; // The same
echo $object->{'abc'}; // The same
对象变量可能有些有用,但它们很少是必需的。使用关联数组通常是更好的选择。它是
类名::$foo
用于访问静态属性,而$object->foo
用于访问对象members@RoyalBg对的但是OP把$
符号放在哪里弄糊涂了。@RoyalBg谢谢你提供了关于静态属性的额外信息。很好,很好+1谢谢:)我必须承认,我的第一个星期天早上的表情也告诉我第一行是错的;)非常感谢你的帮助!回答得好!谢谢你谢谢你扩展视野。非常有用。
$object = new stdClass;
$object->abc = 'The alphabet!';
$foo = 'abc';
echo $object->$foo;
echo $object->{$foo}; // The same
echo $object->{'abc'}; // The same