1

我想知道是否有一种方法可以在 PHP 中创建一个类,与其他变量相比,使用默认值而不是类本身?这样:

class Test {
    private $name;
    private $val;
    public function __construct($name, $val) {
       $this->name = $name;
       $this->val = $val;
    }
    public __default() {
        return $val;
    }
    public function getName() {
        return $name;
    }
}

然后我可以使用一个函数,比如__default当我将它与另一个值进行比较时,例如:

$t = new Test("Joe", 12345);
if($t == 12345) { echo "I want this to work"; }

将打印“我希望它工作”这句话。

4

5 回答 5

2

据我所知,这是不可能的。您正在寻找的最接近的是要在类上设置的 __toString() 方法。

http://php.net/manual/en/language.oop5.magic.php

PHP 可能会尝试将其转换为整数,但我不确定是否有类方法可以完成此操作。您可以尝试字符串比较。

<?php
class Test {
    private $name;
    private $val;
    public function __construct($name, $val) {
       $this->name = $name;
       $this->val = $val;
    }
    public function __toString() {
        return (string)$this->val;
    }

    public function __toInt() {
        return $this->val;
    }

    public function getName() {
        return $this->name;
    }
}

$t = new Test("Joe", 12345);
if($t == '12345') { echo "I want this to work"; }
于 2013-05-15T15:32:32.013 回答
1

魔术__toString方法会做你想做的一些警告:

class Test {
    private $name;
    private $val;
    public function __construct($name, $val) {
       $this->name = $name;
       $this->val = $val;
    }
    public function __toString() {
        return $this->val;
    }
    public function getName() {
        return $this->name;
    }
}

对象不能直接转换为整数,因此在与整数比较时总是会得到 a,但如果将比较的任一侧转换为字符串,它将按预期工作。

if($t == 12345)          // false with a warning about can't cast object to integer
if((string)$t  == 12345) // true
if($t == "12345")        // true 
于 2013-05-15T15:39:37.227 回答
0

为什么不沿着这条线:

class Test {
    private $name;
    private $val;
    public function __construct($name, $val) {
       $this->name = $name;
       $this->val = $val;
    }
    public __default() {
        return $val;
    }

    public compare($input) {
        if($this->val == $input)
            return TRUE;
        return FALSE;
    } 

    public function getName() {
        return $name;
    }
}

$t = new Test("Joe", 12345);
if($t->compare(12345)) { echo "I want this to work"; }

从其他答案看来,没有内置函数来处理这个问题。

于 2013-05-15T15:34:33.510 回答
0

您的对象不太可能等于整数。但是你可以实现类似于 Java 的东西hashCode()——一个做一些数学运算来产生数字哈希的类方法——一个基于即它的内部状态、变量等的返回值。然后比较这些哈希码。

于 2013-05-15T15:30:45.277 回答
0

在你的类中实现__toString() 。

喜欢:

class myClass {
    // your stuff

    public function __toString() {
        return "something, or a member property....";
    }
}
于 2013-05-15T15:31:43.983 回答