Измените своего конструктора к следующему так, чтобы это вызвало конструктора базового класса правильно:
public class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extrainfo) : base(message)
{
//other stuff here
}
}
Примечание, что конструктор не что-то, что можно назвать в любое время в рамках метода. Это - причина, Вы получаете ошибки в своем вызове в теле конструктора.
Вы можете воспользоваться тем фактом, что PHP будет разыменовывать результаты вызова функции.
Вот пример кода, который я придумал:
$x = 'x';
$y = 'y';
$arr = array(&$x,&$y);
print_r($arr);
echo "<br/>";
$arr2 = $arr;
$arr2[0] = 'zzz';
print_r($arr);
print_r($arr2);
echo "<br/>";
$arr2 = array_flip(array_flip($arr));
$arr2[0] = '123';
print_r($arr);
print_r($arr2);
Результаты выглядят так:
Array ( [0] => x [1] => y ) Array ( [0] => zzz [1] => y ) Array ( [0] => zzz [1] => y ) Array ( [0] => zzz [1] => y ) Array ( [0] => 123 [1] => y )
Вы можете видеть, что результаты использования array_flip ()
во время присвоения $ arr
$ arr2
приводят к различиям в последующих изменениях в $ arr2
, поскольку вызов array_flip ()
вызывает разыменование.
Это не кажется очень эффективным, но может сработать для вас, если $ this-> x-> getResults ()
возвращает массив:
$data['x'] = array_flip(array_flip($this->x->getResults()));
$data['y'] = $data['x'];
См. этот (неотвеченный) поток для другого примера.
Однако если все в вашем возвращенном массиве является объектом, то единственный способ скопировать объект должен использовать clone ()
,и вам нужно будет пройти через $ data ['x']
и клонировать каждый элемент в $ data ['y']
.
Пример:
$data['x'] = $this->x->getResults();
$data['y'] = array();
foreach($data['x'] as $key => $obj) {
$data['y'][$key] = clone $obj;
}
Непросто. Читайте про клон
НО! если ваши элементы не объекты и не переменные типа ссылки , у вас нет проблем.
Пример ссылочных типов:
$v=11;
$arr[]=&$v;
Если вы работаете с объектами, вы можете взглянуть на clone
, чтобы создать копию объекта вместо ссылки .
Вот очень короткий пример:
Во-первых, с массив, он работает по значению:
$data['x'] = array(
'a' => 'test',
'b' => 'glop',
);
$data['y'] = $data['x'];
$data['y'][0] = 'Hello, world!';
var_dump($data['x']); // a => test : no problem with arrays
По умолчанию с объектами он работает по ссылке:
$data['x'] = (object)array(
'a' => 'test',
'b' => 'glop',
);
$data['y'] = $data['x'];
$data['y']->a = 'Hello, world!';
var_dump($data['x']); // a => Hello, world! : objects are by ref
Но, если вы клонируете объект, вы работаете с копией:
Полагаю, это ваш случай?
$data['x'] = (object)array(
'a' => 'test',
'b' => 'glop',
);
$data['y'] = clone $data['x'];
$data['y']->a = 'Hello, world!';
var_dump($data['x']); // a => test : no ref, because of cloning
Надеюсь, это поможет,