xPostModel Object
(
[script:Model:private] => abc
)
Я хочу изменить abc на efg, как я могу это сделать? Там в любом случае ?Как получить доступ к закрытому члену класса?
xPostModel Object
(
[script:Model:private] => abc
)
Я хочу изменить abc на efg, как я могу это сделать? Там в любом случае ?Как получить доступ к закрытому члену класса?
Если вы не можете внести изменения в определение класса, и для свойства класса нет общедоступного метода setter, и вам действительно нужно иметь возможность напрямую редактировать свойство вне класса, то ваш единственный вариант, вероятно, использует Reflection методы, смотри пример здесь: https://stackoverflow.com/a/6448613/1362634
Вот пример, который должен работать в вашем случае, чтобы установить частную собственность $script
в $obj
типа xPostModel
(где свойство наследуется от родительского класса Model
):
$obj = new xPostModel();
$refProperty = new ReflectionProperty('Model', 'script');
$refProperty->setAccessible(true);
$refProperty->setValue($obj, 'def');
И вот пример полностью работающего кода с определениями класса макета, чтобы имитировать ситуацию вопроса.
<?php
error_reporting(-1);
ini_set('display_errors', 1);
class Model {
private $script = 'abc';
}
class xPostModel extends Model {}
$obj = new xPostModel();
print_r($obj); // Check original value of inherited private property
$refProperty = new ReflectionProperty('Model', 'script');
$refProperty->setAccessible(true);
$refProperty->setValue($obj, 'def');
print_r($obj); // Check that property has been changed
Где это необходимо изменить? Вы можете изменить его непосредственно только в самом классе, поэтому, если вам нужно изменить его вне класса, вам понадобится сделать для него метод setter в классе. – Haprog
на самом деле у меня нет доступа .. я могу только сделать его объектом .. –
Вы также можете использовать Reflection для этого, но это не должно считаться хорошей практикой в обычных ситуациях. Вы можете увидеть пример здесь: http://stackoverflow.com/a/6448613/1362634 – Haprog