可以创建具有默认值的类

时间:2013-05-15 15:27:10

标签: php

我想知道是否有办法在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"; }

将打印“我想让它工作”这句话。

5 个答案:

答案 0 :(得分:2)

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

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

PHP可能会尝试将其转换为Integer,但我不确定是否有类方法可以实现此目的。你可以尝试字符串比较。

<?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"; }

答案 1 :(得分: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;
    }
}

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

if($t == 12345)          // false with a warning about can't cast object to integer
if((string)$t  == 12345) // true
if($t == "12345")        // true 

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在班级中实施__toString()

像:

class myClass {
    // your stuff

    public function __toString() {
        return "something, or a member property....";
    }
}

答案 4 :(得分: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"; }

从其他答案来看,似乎没有内置功能来处理这个问题。