Php 如何制作动态变量
请记住,我没有声明变量abc,但我想将$abc设置为'abc'。如何做到这一点 抱歉,因为这是一个愚蠢的问题Php 如何制作动态变量,php,oop,Php,Oop,请记住,我没有声明变量abc,但我想将$abc设置为'abc'。如何做到这一点 抱歉,因为这是一个愚蠢的问题 <?php class test{ function foo(){ echo $this->abc; } } $test = new test; $test->abc = 'abc'; ?> 当实例化对象时自动执行构造函数时,$abc将被创建为类测试的公共属性 或 当您调用f
<?php
class test{
function foo(){
echo $this->abc;
}
}
$test = new test;
$test->abc = 'abc';
?>
当实例化对象时自动执行构造函数时,$abc将被创建为类测试的公共属性
或
当您调用foo方法时,将在类test的实例中创建一个名为$abc的公共属性(如果它不存在的话)
当实例化对象时自动执行构造函数时,$abc将被创建为类测试的公共属性
或
调用foo方法时,将在类test的实例中创建一个名为$abc的公共属性,如果它不存在,我将使用PHP支持的神奇方法。基本上,我会构建一个以字符串作为参数的构造函数
class test{
$this->abc = 'abc';
public function foo(){
if (!isset($this->abc))
$this->abc = 'abc';
echo $this->abc;
}
}
$test = new test;
$test->abc = 'abc';
当然,您必须回显它,以便调用magic方法uu toString()。我将使用PHP支持的magic方法。基本上,我会构建一个以字符串作为参数的构造函数
class test{
$this->abc = 'abc';
public function foo(){
if (!isset($this->abc))
$this->abc = 'abc';
echo $this->abc;
}
}
$test = new test;
$test->abc = 'abc';
当然,您必须回显它,以便调用神奇的方法uu toString()。您测试过它吗?虽然我不确定这是否是一个好主意,但它确实有效。你测试过它吗?虽然我不确定这是否是一个好主意,但它仍然可以工作。您可以通过重载php的一些神奇函数来“动态创建”属性和函数。有关更多信息,请参阅链接。在初始化类时,通常会使用_构造函数来创建变量(如Mark Baker和MAINERROR已经建议的)。这是我的首选方式
但是,您可以覆盖uu set函数来处理不可访问属性的设置。但是请记住,覆盖和使用这些函数(除了_构造)会很快变得非常混乱。您可以通过重载php的一些神奇函数来“动态创建”属性和函数。有关更多信息,请参阅链接。在初始化类时,通常会使用_构造函数来创建变量(如Mark Baker和MAINERROR已经建议的)。这是我的首选方式
但是,您可以覆盖uu set函数来处理不可访问属性的设置。但是请记住,覆盖和使用这些函数(除了_构造)可能会很快变得非常混乱。实际上,这已经起作用了。但这是一种糟糕的做法 通常你应该这样做:
$myClass = new Test('abc');
echo $myClass;
这使得:
class test {
private $abc;
public function foo() {
echo $this->abc;
}
public function getABC() {
return $this->abc;
}
public function setABC($abc) {
// You can also add some additionally checks
$this->abc = $abc;
}
}
记住要使类属性($abc)始终是私有的或受保护的。正是封装使OOP如此强大
如果您想使用动态变量名,那么您不需要设置$this->abc而是要设置$this->cba,您应该使用神奇的方法\uuuu set和\uu get
有关魔术方法的更多信息,请访问:
$bar = new test;
$bar->setABC('abc');
$bar->foo();
实际上,这已经起作用了。但这是一种糟糕的做法 通常你应该这样做:
$myClass = new Test('abc');
echo $myClass;
这使得:
class test {
private $abc;
public function foo() {
echo $this->abc;
}
public function getABC() {
return $this->abc;
}
public function setABC($abc) {
// You can also add some additionally checks
$this->abc = $abc;
}
}
记住要使类属性($abc)始终是私有的或受保护的。正是封装使OOP如此强大
如果您想使用动态变量名,那么您不需要设置$this->abc而是要设置$this->cba,您应该使用神奇的方法\uuuu set和\uu get
有关魔术方法的更多信息,请访问:
$bar = new test;
$bar->setABC('abc');
$bar->foo();
我不明白你的问题。您已经将
$abc
设置为“abc”,是吗?您是否试图在类测试中创建一个名为“abc”的动态命名变量?变量始终是动态的。否则它将是一个常数。也许你在寻找属性重载:漂亮的阿凡达tho:)我不明白你的问题。您已经将$abc
设置为“abc”,是吗?您是否试图在类测试中创建一个名为“abc”的动态命名变量?变量始终是动态的。否则它将是一个常量。也许你在寻找属性重载:漂亮的阿凡达tho:)