Вы ищете
table(tabraw$V1)
#
# CA CO OH
# 1 1 2
Объект tab
является объектом таблицы классов и не поддерживает функцию $
.
Вы также можете получить желаемая информация от объекта tab
с
rowSums(tab)
# CA CO OH
# 1 1 2
Это не представляется возможным в текущих версиях 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
, это представляет проблему для внутреннего использования, так как теперь вам всегда дают два места для проверки динамических свойств. Вот почему это хакерское решение вместо реального решения.
setAccessible()
. Благодаря! – Felipe Francisco 23 January 2014 в 03:49