PHP Object++ (int ++)


PHP Object++ (int ++)

是否可以在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)
}