setter函数中的PHP变量变量

时间:2018-10-28 16:15:55

标签: php oop variables

我试图找到一种方法来定义用于创建对象的不确定的但不是无限数量的变量。我尝试了几种方法来尝试此操作,但是我似乎无法解决这个问题。

这是我想出的:

maxfun

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您要解决两个问题:

  1. variable scope
  2. 变量$Foo的值是静态的,并且永不更改-值始终为Bar0,即使您更改$aCount,因为该值只是一个字符串

工作示例:

<?php
$aCount= 0;
$Foo = function(){ global $aCount; return "Bar".$aCount; };
${$Foo()} = array("Data1"=>NULL, "Data2"=>NULL);
function getBarData1() {
    global $Foo, ${$Foo()};
     return ${$Foo()}['Data1'];
}
function getBarData2() {
    global $Foo, ${$Foo()};
    return ${$Foo()}['Data2'];
}
function setBarData($newBarData1, $newBarData2) {
    global $aCount, $Foo, ${$Foo()};
    ${$Foo()}['Data1'] = $newBarData1;
    ${$Foo()}['Data2'] = $newBarData2;
    $aCount++;
}
setBarData('First', 'Line');
setBarData('Second', 'Dot');
setBarData('Third', 'Dash');
$aCountTotal = $aCount;
for($i = 0; $i < $aCountTotal; $i++) {
    $aCount = $i;
    echo getBarData1() ."\n";
    echo getBarData2() ."\n";
}

在这种情况下,您应该使用数组,在极少数情况下,变量变量确实很有用

数组示例:

<?php
$arr = array();
function getBarData1($index) {
    global $arr;
     return $arr[$index]['Data1'];
}
function getBarData2($index) {
    global $arr;
    return $arr[$index]['Data2'];
}
function setBarData($newBarData1, $newBarData2) {
    global $arr;
    $arr[] = ['Data1' => $newBarData1, 'Data2' => $newBarData2];
}
setBarData('First', 'Line');
setBarData('Second', 'Dot');
setBarData('Third', 'Dash');
for($i = 0; $i < count($arr); $i++) {
    echo getBarData1($i) ."\n";
    echo getBarData2($i) ."\n";
}

比在函数中使用全局变量更好的是通过像这样的参数传递数据:

<?php

$arr = array();
function getData1($array, $index) {
     return $array[$index]['Data1'];
}
function getData2($array, $index) {
    return $array[$index]['Data2'];
}
// reference to $array because we want to change the value
function setData(&$array, $newBarData1, $newBarData2) { 
    $array[] = ['Data1' => $newBarData1, 'Data2' => $newBarData2];
}
setData($arr, 'First', 'Line');
setData($arr, 'Second', 'Dot');
setData($arr, 'Third', 'Dash');

for($i = 0; $i < count($arr); $i++) {
    echo getData1($arr, $i) ."\n";
    echo getData2($arr, $i) ."\n";
}