Это не представляется возможным в текущих версиях PHP.
Хотя ReflectionProperty::setAccessible()
делает , принимает логический аргумент, изменение, которое оно делает только позволяет самому Reflection получить доступ / не получить доступ к значению. Фактически это не изменяет доступность фактического свойства.
Как хакерское обходное решение для сохранения динамических свойств private, рассмотрите наличие свойств хранилища __set
, которые на самом деле не существуют в выделенном частном массиве. Пример кода:
class Test {
private $foo;
public $bar;
private $_properties;
public function __get($prop) {
if(property_exists($this, $prop))
return $this->$prop;
if(array_key_exists($prop, $this->_properties))
return $this->_properties[$prop];
}
public function __set($prop, $value) {
if(!property_exists($this, $prop)) {
$this->_properties[$prop] = $value;
echo 'SetDynamic: ', $prop, "\n";
return;
}
$this->$prop = $value;
echo 'Set: ', $prop, "\n";
}
}
Выполняется из интерактивной подсказки PHP:
php > $t = new Test; php > $t->foo = 1; Set: foo php > $t->foo = 2; Set: foo php > $t->bar = 1; php > $t->testorama = 1; SetDynamic: testorama php > $t->testorama = 2; SetDynamic: testorama
Хотя это гарантирует, что внешний доступ всегда проходит через ваши методы __get
и __set
, это представляет проблему для внутреннего использования, так как теперь вам всегда дают два места для проверки динамических свойств. Вот почему это хакерское решение вместо реального решения.
Как правило, для вставки элемента требуется 3 шага:
Если элементы вставки имеют регулярность (как и все элементы равны, это сэкономит 1. locate where to insert
время в связанном списке), но сложность по-прежнему O(n)
.
Если вставные элементы не имеют никакой регулярности , это достаточно случайно. Нет разницы между вставкой одной и вставкой партии.
Итак, одним словом, нет специальной структуры данных для пакетной вставки. но вы можете улучшить Constant Time Complexity
в некоторых особых условиях.
PS: общая отсортированная структура данных представляет собой сбалансированное двоичное дерево, тратит O(logn)
временную сложность при обновлении