Я не уверен, как лучше всего назвать это, поэтому я подумал, что отправлю пример того, чего я пытаюсь достичь. На данный момент я упростил это.Параметры PHP, закрытие и извлечение
Итак, сначала это самый базовый класс, который будет выполнять действие.
abstract class AuditedSave extends AuditedSaveImplementation
{
public static function run($callback = null)
{
return new AuditedSaveImplementation($callback);
}
}
class AuditedSaveImplementation
{
public function __construct(Closure $closure)
{
echo ' - I ran before'; // point 1, $test = 0
$closure();
echo ' - i ran after!'; // point 2, $test = 1
}
}
Тогда код, который называет его.
$test = 0;
AuditedSave::run(function() use ($test)
{
$test = 1;
});
Так между точками 1 и 2, как заметил, пробеги закрытия и будет установить значение $ теста 1. Тем не менее, я хочу, чтобы сохранить значение все, что передается в качестве первого параметра (в данном случае , $test
) в качестве копии того, что было во время вызова функции - которая всегда будет выполняться, тогда замыкание затем изменяет ее (это часть, которая может быть переменной), а затем после этого производится сравнение, и действия происходят на основе различия, которые всегда будут выполняться.
Однако для этого мне нужно иметь доступ к переменной $ test в методе __construct()
от AuditedSaveImplementation
, не зная, как он называется.
Возможно ли это вообще?
Нет, объем '$ test' - это нечто совершенно иное, чем' AuditedSaveImplementation :: __ construct'. Вы должны переосмыслить все, что вы пытаетесь сделать здесь. – deceze
Невозможно. Переходите в другой класс с соответствующей логикой (например, 'getValue()' и/или 'getOriginalValue()') вместо простого закрытия. Также '$ test' всегда копируется в указанном вами коде (ну, на самом деле это копирование на запись, но это не очень важно). Изменение его не повлияет на исходную переменную. – ShiraNai7