Переменные PHP Переменные в функции сеттера - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь найти способ определения неопределенного, но не бесконечного числа переменных, которые будут использоваться для создания объектов.Я попробовал несколько способов попробовать это, но я не могу обернуть голову вокруг этого.

Вот что я придумал:

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

Любая помощь будет принята с благодарностью,

1 Ответ

0 голосов
/ 28 октября 2018

Вы столкнулись с двумя проблемами:

  1. область действия переменной
  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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...