Re: Re: Trouble interpreting error message
| From: | Jeffry Killen | Date: | Thu, 10 Dec 2015 05:02:10 +0000 |
| Subject: | Re: Re: Trouble interpreting error message | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-325281@lists.php.net to get a copy of this message | ||
On Dec 9, 2015, at 5:35 PM, Ryan Pallas wrote:
On Wed, Dec 9, 2015 at 6:23 PM, Jeffry Killen <jekillen@prodigy.net> wrote:I have also been testing out the use of non static member variable array referenced via $this-> that is working. The non static member array appears to be retaining the code that is assigned to it, as I can call it again in a subsequent call and it runs as expected, using the original array key string assigned to it. // yes, it is PHP Version 5.6.0 running under Apache 2.4x on FreeBSD 10.01 $_fileSelf = basename($_SERVER['PHP_SELF']); if($_fileSelf == 'index.php') { $_fileSelf = './'; } class _DEVHello, again: In the original post I was trying to apply anonymous code to a static member array.You appear to be using a 5.x version of PHP. This is an associativity problem and can be resolved by upgrading to PHP7. Here is your original code, you can see it works in PHP7, and produces and notice followed by a fatal error in PHP<7 https://3v4l.org/Zu1jO For more information, see http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.indirectself::$_runList[$_what] = $_code; $_out = self::$_runList[$_what]($_params); // >>> line # 27referred to in error message What is now working is to use a locally declared array inside run() instead: $_runList = array() $_runList[$_what] = $_code; return $_runList[$_what]($_params); Apparently, php doesn't like doing this with a static member array variable. Thanks to anyone who spent some time with the original post. JK
{
private static $_className = '';
private $_runList = array();
private static $_codeSaved = array();
public function __construct()
{
self::$_className = get_class($this);
}
public function run($_what, $_code, $_params)
{
$_errHead = self::$_className." -> ".__FUNCTION__;
$_out = array();
if($_code !== '')
{
self::$_codeSaved[$_what] = $_code;
$this->_runList[$_what] = $_code;
}
$_out = $this->_runList[$_what]($_params);
return $_out;
}
}$_trial = new _DEV(); $_test_1 = function()
{
$_out = array();
$_out['1_passed'] = "Appears";
return $_out;
};
$_test_2 = function()
{
$_out = array();
$_out['2_passed'] = " to be ";
return $_out;
};
$_test_3 = function()
{
$_out = array();
$_out['3_passed'] = "working";
return $_out;
};
$_resArray = array();
$_resArray[0] = $_test_1;
$_resArray[1] = $_test_2;
$_resArray[2] = $_test_3;
$_display = '';
if($_GET['try'] == 'true')
{
for($_itr = 0; $_itr < 3; $_itr++)
{
$_out = '';
$_out = $_trial->run('try-'.($_itr + 1), $_resArray[$_itr], '');
$_display .= $_out[($_itr+1)."_passed"]."\n";
}
$_extra = array();
$_extra = $_trial->run('try-2', '', '');
$_display .= "\nextra: ".$_extra['2_passed'];
}
/*
$_display prints:
Appears
to be
working
extra: to be
*/