在PHP中可能会出现以下内容吗?
$blah = 'foo1';
class foo2 extends $blah {
//...
}
class foo1 {
//...
}
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误.
我想动态设置$ blah所以我可以扩展我想要的任何类.
编辑:想要这样做的原因是因为我想在相关类中使用另一个类的函数.最后它会是这样的:
Final extends foo1 extends foo2 extends foo3 extends foo4 extends parent { ... }
Run Code Online (Sandbox Code Playgroud)
最后,我决定在类中实例化另一个类并使用它.不是最好的选择,因为它们都是你们两个相同的类,但是这些不会经常使用,因此它现在可以使用.
我已经用PHP开发了一段时间了,而且我还没有完成我必须使用变量变量的任务.任何人都可以举例说明使用它们是个好主意吗?或者他们被包含在语言中只是为了好玩?
我知道你可以这样做:$hash('foo')和$$foo也$bar[$foo],每这些东西叫什么?
我不知道如何问这个问题,但这里是:
$id = 1;
$age = 2;
$sort = "id"; // or "age";
$arr = array($$sort => 'string'); // so that it becomes 1 => 'string'
^ what goes here? // instead of 'id' => string'
Run Code Online (Sandbox Code Playgroud)
这就是&字符的用途吗,“变量”?
或者可能eval?
我真的不知道如何描述这个问题,所以如果标题有点不清楚,我很抱歉.
我有一个带有数组字段的对象.我得到了存储在变量中的这些字段的名称,我希望在其中一个数组字段中找到一个元素.例如
$field_name = 'array_field';
$object = new stdClass();
$object->array_field= array('this', 'is', 'an', 'array);
Run Code Online (Sandbox Code Playgroud)
我知道我可以访问数组$object->$field_name,但是现在我想通过$field_name变量访问它来访问数组中的键.例如(显然不起作用)$object->$field_name[0]
例如,一个简单的mvc类型系统:
/ api/class/method使用.htaccess/nginx.conf重写为php变量
然后做类似的事情:
<?php
// Set up class + method variables
$className = some_class_filter($_GET['class']);
$method = some_method_filter($_GET['method']);
// Check if class exists and execute
if(file_exists(BASE . "/controllers/" . $className . ".class.php")) {
require BASE . "/controllers/" . $className . ".class.php";
$$className = new $className();
// Execute the method
$$className->$method();
} else {
// Spit out some error based on the problem
}
?>
Run Code Online (Sandbox Code Playgroud)
这是非常糟糕的做法吗?如果这是不好的做法,有人可以解释为什么?如果是这样,有没有更好的方法来做我正在做的事情?
编辑基本上我使用变量变量的原因是为了简化核心系统的扩展 - 即 - 添加一个新的控制器很简单.我绝对理解允许基本上任何函数或类在没有某种过滤器的情况下实例化的安全风险.
'some_filter_here'可以是允许的控制器列表 - 白名单,正如这里提到的那样.
我正在尝试使用变量动态访问$ _GET和$ _POST数组等.我试图这样做的原因是我可以在多个数组上执行类似的操作,而无需为每个数组声明特定的迭代.我有理由相信这是可能的,因为PHP的文档说它能够使用变量来动态访问数组,但是我无法让它工作.一个简单的演示是当我试图验证某个属性已被设置时.
if(isset(${$this->_array}[$property])) { return ${$this->_array}[$property]; }
else { return null; }
Run Code Online (Sandbox Code Playgroud)
当我运行上面的脚本时,我总是得到null,但是当我静态地寻找所需的属性时,手动使用$ _GET或$ _POST,我得到了预期的结果.我有三重检查$this->_array,$property他们正在返回正确的字符串值.这些数组是否不可用于此类访问,或者我做错了什么?
我想告诉我的函数根据星期几调用哪个变量.一周中的某一天存储在$ s_day中,我想要调用的变量根据它的日期而变化.
例如
我在$ d_monday_text1中存储了一个字符串'Welcome to the week'.而不是构建一组7个条件语句(例如,如果date = monday echo $ foo,否则如果date = tuesday echo $ bar ...),我可以通过连接名称来更改函数中调用的变量的名称吗?变量?
$s_day = date("l");
$text1 = '$d_'.$s_day.'_text1';
Run Code Online (Sandbox Code Playgroud)
我希望这个评估为$ d_monday_text1,如上所述,它具有"欢迎来到一周"的值.所以,以后我想用:
echo $text1;
Run Code Online (Sandbox Code Playgroud)
产生结果输出=欢迎来到一周.
我已经研究了变量变量,这可能是去这里的方法,但我正在努力学习语法.我可以让它回应连接的名称,但我无法弄清楚如何评估该名称.
是否可以创建指向数组或嵌套对象的变量变量?php文档明确指出你不能指向SuperGlobals,但它不清楚(至少对我来说)这是否适用于一般的数组.
这是我对数组var var的尝试.
// Array Example
$arrayTest = array('value0', 'value1');
${arrayVarTest} = 'arrayTest[1]';
// This returns the correct 'value1'
echo $arrayTest[1];
// This returns null
echo ${$arrayVarTest};
Run Code Online (Sandbox Code Playgroud)
这是一些简单的代码,用于显示对象var var的含义.
${OBJVarVar} = 'classObj->obj';
// This should return the values of $classObj->obj but it will return null
var_dump(${$OBJVarVar});
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?
可能重复:
变量变量的实际用途是什么?
好吧,这个问题可能看起来有点点 - 白痴,但我真的很想知道:变量变量何时有用?我用PHP编程好几年了,但我从来没有用过它们.对我来说,它看起来很有趣而不是有用.
变量变量的一些现实生活中的例子是什么?
更新:
我对你的投票感到非常抱歉.除了一件事之外,链接的"重复"可能真的是一个骗局:那里列出的例子告诉我为什么不使用变量变量.