有没有办法在Javascript中将变量名称作为字符串?(比如Cocoa中的NSStringFromSelector)
我想这样做:
var myFirstName = 'John';
alert(variablesName(myFirstName) + ":" + myFirstName);
--> myFirstName:John
Run Code Online (Sandbox Code Playgroud)
- 添加
我正在尝试使用JavaScript连接浏览器和其他程序.我想将实例名称从浏览器发送到另一个程序以获取回调方法.
FooClass = function(){};
FooClass.someMethod = function(json) {
// Do something
}
instanceA = new FooClass();
instanceB = new FooClass();
doSomethingInAnotherProcess(instanceB); // result will be substituted by using instanceB.someMethod();
...
Run Code Online (Sandbox Code Playgroud)
....
[来自其他节目]
evaluateJavascriptInBrowser("(instanceName).someMethod("resultA");");
Run Code Online (Sandbox Code Playgroud)
在PHP中:如何在PHP 中将变量名称作为字符串?
我知道这不是完全反思,而是一种.我想创建一个获取变量的调试函数并输出var_dump和变量名.
当然,当程序员写一个函数调用时,他们已经知道了变量的名字,所以他们可以这样写:
debug( $myvar, 'myvar' );Run Code Online (Sandbox Code Playgroud)
但我希望它能够快速轻松地编写,只需要函数名称,变量和vo!
debug( $myvar ); // quicker and easier :)Run Code Online (Sandbox Code Playgroud) 如果我有
$abc = '123';
function write($var){
}
Run Code Online (Sandbox Code Playgroud)
我怎么会write发现现在代表的变量$var被调用$abc?
我正在寻找一种逆转func_get_args().我想知道在定义函数时如何命名参数.这样做的原因是我不想在使用通过方法作为参数传递的设置变量时重复自己:
public function myFunction($paramJohn, $paramJoe, MyObject $paramMyObject)
{
$this->paramJohn = $paramJohn;
$this->paramJoe = $paramJoe;
$this->paramMyObject = $paramMyObject;
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以这样做:
foreach (func_get_params() as $param)
$this->${$param} = ${$param};
}
Run Code Online (Sandbox Code Playgroud)
这是一种矫枉过正,这是一个简单的愚蠢想法,还是有更好的方法来实现这一目标?
我有一个功能
function my_dump($a,$name){
echo '<pre>'.$name.":\n";
var_export($a);
echo '</pre>';
}
Run Code Online (Sandbox Code Playgroud)
如何只使用一个参数来实现这一点,以便函数识别被调用变量本身的名称?
例如:
my_dump($cool_variable_name);
Run Code Online (Sandbox Code Playgroud)
将输出:
名称:"cool_variable_name"
内容:array(...
我有一个php类,其中包含一些表示实例状态的类常量.
当我使用该类时,在我运行一些方法之后,我会做一些检查以确保状态是我期望的.
例如,在调用某些方法之后,我希望状态为MEANINGFUL_STATUS_NAME.
$objInstance->method1();
$objInstance->method2();
if ( $objInstance->status !== class::MEANINGFUL_STATUS_NAME ) {
throw new Exception("Status is wrong, should not be " . class::MEANINGFUL_STATUS_NAME . ".");
}
Run Code Online (Sandbox Code Playgroud)
但是,这给了我异常消息
"Status is wrong, should not be 2"
Run Code Online (Sandbox Code Playgroud)
当我真正想看到的是
"Status is wrong, should not be MEANINGFUL_STATUS_NAME"
Run Code Online (Sandbox Code Playgroud)
所以我失去了常名的意义.我正在考虑制作一个"转换表"数组,所以我可以将常量值转换回它们的名称,但这看起来很麻烦.我应该如何翻译它,所以我收到一条错误消息,让我更好地了解出了什么问题?
我只是将它们放在一起以帮助调试一些 PHP 脚本。正如你所看到的,它很草率,但我会进一步改进它。
我的调试函数有两个变量传入,一个变量名和一个变量值。
是否可以只传递变量并以某种方式获取变量的名称,而无需像我现在设置的那样手动执行?
功能
<?php
function debug($varname, $var)
{
echo '<br>' . $varname;
// $var is a STRING
if (is_string($var)) {
echo ' (string) = ' . $var . '<br>';
// $var is an ARRAY
} elseif (is_array($var)) {
echo ' (array) = <pre>';
print_r($var);
echo '</pre><br>';
// $var is an INT
} elseif (is_int($var)) {
echo ' (int) = ' . $var . '<br>';
// $var is an OBJECT
} elseif (is_object($var)) {
echo ' (object) = …Run Code Online (Sandbox Code Playgroud) 我经常看到或必须将一堆变量转换为如下数组:
$array = array("description"=>$description, "title"=>$title, "page"=>$page, "author"=>$author);
Run Code Online (Sandbox Code Playgroud)
基本上,所有数组键都与传入的变量的名称相匹配.有没有办法引用变量名,以便它可以像这样传递到数组中:
$array[varName($description)] = $description;
Run Code Online (Sandbox Code Playgroud) 我可以这样做,也许使用ReflectionClass?
myprintr($some_object);
function myprintr(){
foreach(func_get_args() as $key => $arg){
// here I want to get the name of the passed variable, "some_object"
// $key seems to be numeric...
}
}
Run Code Online (Sandbox Code Playgroud) function myCheck($in)
{ return isset($in); }
$var1='Something';
$var2='$var1';
$var3='$varNonExitant';
Run Code Online (Sandbox Code Playgroud)
我想要实现的是用来myCheck评估内容的存在,如下所示:
myCheck($var2) return true;
myCheck($var3) return false;
Run Code Online (Sandbox Code Playgroud) 我确保这是一个非常常见的情况,当你必须测试变量(并且它们很多!)时,就像这个例子一样(我只是为了减少工作量而将这样的变量命名为vars):
$variable0='red';
$variable1='blue';
$variable2='green';
$variable3='pink';
$variable4='purple';
$variable5='hellow';
$variable6='foo';
$variable7='bar';
$variable8='hi';
$variable9='bye';
echo
'$variable0='.$variable0.'<br>
$variable1='.$variable1.'<br>
$variable2='.$variable2.'<br>
$variable3='.$variable3.'<br>
$variable4='.$variable4.'<br>
$variable5='.$variable5.'<br>
$variable6='.$variable6.'<br>
$variable7='.$variable7.'<br>
$variable8='.$variable8.'<br>
$variable9='.$variable9;
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有更好的方法使这种回声/转储/打印更容易?
当然,还有其他方法可以完成同样的主席工作:
$x=
'$variable0='."$variable0\n".
'$variable1='."$variable1\n".
'$variable2='."$variable2\n".
'$variable3='."$variable3\n".
'$variable4='."$variable4\n".
'$variable5='."$variable5\n".
'$variable6='."$variable6\n".
'$variable7='."$variable7\n".
'$variable8='."$variable8\n".
'$variable9='."$variable9"
echo nl2br($x);
Run Code Online (Sandbox Code Playgroud)
要么:
$x=<<<HEREDOC
\$variable1=$variable1
\$variable2=$variable2
\$variable3=$variable3
\$variable4=$variable4
\$variable5=$variable5
\$variable6=$variable6
\$variable7=$variable7
\$variable8=$variable8
\$variable9=$variable9;
HEREDOC;
echo nl2br($x);
Run Code Online (Sandbox Code Playgroud)
但也许PHP有一个功能,使这更容易?
顺便说一句,上面的所有3个解决方案都相同:
$variable1=blue<br>
$variable2=green<br>
$variable3=pink<br>
$variable4=purple<br>
$variable5=hellow<br>
$variable6=foo<br>
$variable7=bar<br>
$variable8=hi<br>
$variable9=bye;
Run Code Online (Sandbox Code Playgroud)