是否可以在php中实现object++?
我只是想知道这样的事情是否可能,如果可能的话,我该如何实现这样的事情?
示例:
class x
{
private $data = 0;
}
$a = new x();
$a++;
我假设您正试图增加类x中的变量$data?
如果是这样的话,你会想做这样的事情:
class x
{
private $data = 0;
public function increaseData()
{
$this->data++;
}
}
$a = new x();
$a->increaseData();
如果有问题的话,你不能覆盖PHP中的++和--(或任何其他)运算符,这与C++或Ruby不同。
您不能从类外访问private
成员,但是您可以在类外增加public
变量。
<?php
class x
{
private $data = 0;
public $newdata = 0;
}
$a = new x();
$a->newdata++;
var_dump($a);
OUTPUT :
object(x)[1]
private 'data' => int 0
public 'newdata' => int 1
一个丑陋的黑客使用反射。。。(在外部修改私有变量)
使用反射,你甚至可以修改外部的私有属性,但这打破了OOP范式,所以不要这样做。这只是为了你的理解。。
<?php
class x
{
public $newdata = 0;
private $data = 0;
}
$a = new x();
var_dump($a);
# Incrementing public var
$a->newdata++;
# Setting the private var
$b = new ReflectionProperty(get_class($a), 'data');
$b->setAccessible(true);
$b->setValue($a, $b->getValue($a)+1);
var_dump($a);
OUTPUT :
class x#1 (2) {
private $data =>
int(0)
public $newdata =>
int(0)
}
class x#1 (2) {
private $data =>
int(1)
public $newdata =>
int(1)
}