标签: variable-variables

PHP变量对象属性

我理解PHP中变量变量的概念.根据我对PHP 中变量变量的理解,下面的代码如下:

$foo = 'hello';
$$foo = 'world';

echo $foo . ' ' . $hello;
Run Code Online (Sandbox Code Playgroud)

将生成输出为:

Hello World
Run Code Online (Sandbox Code Playgroud)

但我发现很难理解变量对象属性的情况

假设我有一个名为foo的类,其中包含一个属性,如下所示:

class foo {    
    var $r   = 'I am r.';
}
Run Code Online (Sandbox Code Playgroud)

现在,创建类foo的实例并使用以下代码的变量变量的概念:

$foo = new foo();

$bar = 'r';
echo $foo->$bar;
Run Code Online (Sandbox Code Playgroud)

将输出:

I am r.
Run Code Online (Sandbox Code Playgroud)

直到一切都很好,但是当我包含一个具有数组值的属性时,它会让我感到困惑.比方说,我将具有数组值的另一个属性添加到类foo,现在该类看起来像:

class foo {    
    var $arr = array('I am A.', 'I am B.', 'I am C.');
    var $r   = 'I am r.';
}
Run Code Online (Sandbox Code Playgroud)

现在当我创建类foo的实例并尝试读取属性$ arr [1]时 …

php arrays variable-variables

3
推荐指数
1
解决办法
103
查看次数

如何从具有变量的类中调用方法?

鉴于此类:

class Tacobell{

    public function order_taco(){
        echo "3 Tacos, thank you.";
    }

    public function order_burrito(){
        echo "Cheesy bean and rice, please";
    }

}

$lunch = new Tacobell;
$lunch->order_burrito();
$lunch->order_taco();
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

$myOrder = 'burrito';
$lunch->order_.$myOrder;
Run Code Online (Sandbox Code Playgroud)

显然代码是下铺 - 但显示我试图做的比试图解释它更好.

也许我说这一切都错了.我想到了一个带有switch语句的方法,传入burrito或taco,然后从那里调用正确的方法.但是我必须从头开始知道结束,并且我可能有很多方法,而且我不必每次都更新switch语句.

谢谢!

php oop variable-variables

2
推荐指数
1
解决办法
1070
查看次数

.NET中的PHP变量变量

.NET本身是否支持与PHP的变量类似的任何内容?

如果没有,1这样的功能如何才能最容易实现?


1如果您认为变量变量总是很糟糕,请随意陈述您的情况,但主要问题是:它们如何实施?

.net php variable-variables

2
推荐指数
1
解决办法
230
查看次数

如何在PHP中使用for循环打印$ title1 $ title2 $ title3 ...

我想使用for循环打印这些变量:

<?php
$title1 = "TEXT1";
$title2 = "TEXT2";
$title3 = "TEXT3";
$title4 = "TEXT4";
$title5 = "TEXT5";

for ($i = 1; $i <= 10; $i++) {    
  echo "$title".$i;   // I want this: TEXT1 TEXT2 TEXT3 TEXT4 TEXT5
}
?>
Run Code Online (Sandbox Code Playgroud)

php variables variable-variables

2
推荐指数
1
解决办法
120
查看次数

没有eval的Python变量变量?

有没有办法在python中使用变量字符串访问变量?例如,我想要比eval以下方式更简洁:

def toggleListButtons (self):
    buttons = ["flip", "remove", "removeAll", "delete", "deleteAll", "loadDirectory"]
    for button in buttons:
        eval("self." + button + "Button.setEnabled(!self." + button + "Button.isEnabled())")
Run Code Online (Sandbox Code Playgroud)

python variables eval variable-variables

2
推荐指数
1
解决办法
629
查看次数

使用变量作为对象的属性名称 - Javascript

看到了一些与此相关的答案,但没有人回答这个问题的主题.

请考虑以下事项:(linkto:jsfiddle)

$(function(){

arrKeys = [];
objArr = [];

nameArr = ['name1','name2','name3','name4'];
descArr = ['desc1','desc2','desc3','desc4'];
allValues = {name:  nameArr, desc: descArr};

arrKeys[0] = 'name';
arrKeys[1] = 'desc';

    first = arrKeys.shift(); // returns 'name'

    $(allValues[first]).each(function (key,value) { 

        console.log(first); //returns 'name'
        objArr[key] = {first:value}; //the problem

    });

    console.log(objArr);


});
Run Code Online (Sandbox Code Playgroud)

使用console.log(objArr)生成以下对象数组,如下所示:

[对象,对象,对象] 0:对象 优先:"name1"1:对象 优先:"name2"2:对象 优先:"name3"3:对象 优先:"name4"长度:4

问题是我希望属性"first"成为var first的值(这是"name"..所以相反,结果将是:

[对象,对象,对象] 0:对象 :"name1"1:对象 :"name2"2:对象 :"name3"3:对象 :"name4"长度:4

(linkto:jsfiddle)

javascript jquery properties object variable-variables

2
推荐指数
1
解决办法
5870
查看次数

数组名称中的卷括号变量,PHP

我知道这里有很多类似的问题,我想我已经把它们都读了.我的问题是我试图遍历一个数组列表并从每个数组中获取一个值.阵列已由第三方设置,我无权配置我接收它们的方式.这是我到目前为止所拥有的:

for ($i = 0; $i < $length; $i++) {

    // Both of these work and return the value I need
    echo $post->related_credits_0_related_show[0]; 
    echo "{$post->related_credits_0_related_show[0]}"

    // But none of these do, and I need to loop through a handful of arrays
    echo "{$post->related_credits_{$i}_related_show[0]}";
    echo "{$post->related_credits_${i}_related_show[0]}";
    echo "{$post->related_credits_{${i}}_related_show[0]}";
    echo "{$post->related_credits_".$i."_related_show[0]}";

}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多(很多!)更多我不会包含的组合.我也尝试将$ i转换为字符串.我一直在反对这个问题.

提前感谢您的帮助.

php arrays variable-variables

2
推荐指数
1
解决办法
331
查看次数

变量处理顺序:PHP 7中的变化

现在使用新的PHP 7.0.0,我有点担心所谓的"变量变量"的评估顺序的变化.

此页面的 "对变量处理的更改"下,将显示一个表,其中包含表达式示例及其处理顺序,在PHP 5和PHP 7中.列出的四个表达式为:

$$foo['bar']['baz']
$foo->$bar['baz']
$foo->$bar['baz']()
Foo::$bar['baz']()
Run Code Online (Sandbox Code Playgroud)

给定以下字符串和数组:

$qux = 'quux';
$foo = array('bar' => array('baz' => 'qux'));
Run Code Online (Sandbox Code Playgroud)

表中的第一个表达式在$$foo['bar']['baz']PHP 5 中被解释为一个名为value in的变量的值$foo['bar']['baz'],因此值为$qux,即 'quux'.

但是,在PHP 7中,正如我所理解的那样,同一个表达式将被解释为一个名为value in的变量$foo,因此我希望PHP注意'数组到字符串转换',因为它$foo是一个数组.

表中的其他示例似乎是同一主题的变体.

当然,我很好奇为什么在PHP 7中改变了这一点(具体来说,为什么这种改变比向后兼容更重要),然而,这对SO来说不是一个合适的问题.我的问题更实用:

应对这种不兼容性的推荐方法是什么?

当然,加入大括号违规表达式将有助于(${$foo['bar']['baz']},$foo->{$bar['baz']},$foo->{$bar['baz']}()Foo::{$bar['baz']}()),但是这是非常麻烦的,经历吨的旧代码,寻找相对较少occurances ...

否则,这四个示例是唯一可能的语法变体吗?也就是说,我可以创建一个RegExp和grep所有违规代码吗?可能存在哪些其他变化?

php migration incompatibility variable-variables php-7

2
推荐指数
1
解决办法
1732
查看次数

如何在PHP中使用变量变量?

这是我想要做的:

<?php
    $my_str = "My String";
    $str = "%my_str";

    $str = str_replace("%", "$", $str);

    echo $str;
?>
Run Code Online (Sandbox Code Playgroud)

上面的代码将'$ my_str'打印到屏幕上.但我希望它打印'My String',就像变量$ my_str的实际值一样

有人知道怎么做吗?

我想要这个的原因是因为我正在编写自己的,非常基本的解析语言,所以在我继续之前我需要这个功能.

php variables variable-variables

1
推荐指数
1
解决办法
267
查看次数

从变量变量调用定义的常量

我试图在一个单独的函数中引用一个已定义的常量.我得到的错误是指未定义的变量,以及为每个FOO和BAR定义为常量的变量.

class Boo {
public function runScare() {
    $this->nowScaring('FOO');
    $this->nowScaring('BAR');
}
private function nowScaring($personRequest) {
    define ('FOO', "test foo");
    define ('BAR', "test bar");
    $person = ${$personRequest};
    echo "<br/>Query selected is: " . $person . "<br/>";
}
}
$scare = new Boo;
$scare->runScare();
Run Code Online (Sandbox Code Playgroud)

php oop variable-variables

1
推荐指数
1
解决办法
5086
查看次数