什么是PHP相当于Java的对象类

时间:2010-12-06 10:59:11

标签: php

在java中,我们有Object类型,可用于转换为特定的类类型。 我们如何在PHP中执行此操作?

此致 Mithun

5 个答案:

答案 0 :(得分:4)

PHP中的通用对象是stdClass的实例。但它不是基类,这意味着除非在类声明中指定extends stdClass,否则类不会继承它。

在PHP中对(object)进行类型转换会产生stdClass。例如:

$a = array('foo' => 'bar');
$o = (object) $a;
var_dump($o instanceof stdClass); // bool(true)
var_dump($o->foo); // string(3) "bar"

在PHP中,没有向上转发和向下转换的概念。您可以为超类或接口键入提示,但这是关于它的。对象始终被识别为您构造它的任何类的实例,例如,与new

答案 1 :(得分:3)

作为具有php和Java经验的人,我可以说php中没有与Java对象相当的东西。在Java中,每个对象都扩展了Object类,在php中,您创建的类默认不扩展任何内容。 Java的Object有一些方便的方法,比如toString(),hashCode(),getClass()以及一些与php无关的方法。

我喜欢Java中的这些标准方法,它们非常便于调试和记录,所以我想念PHP。这就是为什么我通常在php中创建自己的基类并让每个类扩展它。然后它变得很容易记录和调试,你只需$ logger-> log($ obj); 它将使用magic __toString(),至少转储有关该对象的基本信息。

最重要的是,您可以在php中创建自己的基类,然后让每个类扩展它。

我常用的基类:

/**
 * Base class for all custom objects
 * well, not really all, but
 * many of them, especially
 * the String and Array objects
 *
 * @author Dmitri Snytkine
 *
 */
class BaseObject
{

    /**
     * Get unique hash code for the object
     * This code uniquely identifies an object,
     * even if 2 objects are of the same class
     * and have exactly the same properties, they still
     * are uniquely identified by php
     *
     * @return string
     */
    public function hashCode()
    {
        return spl_object_hash($this);
    }

    /**
     * Getter of the class name
     * @return string the class name of this object
     */
    public function getClass()
    {
        return get_class($this);
    }

    /**
     * Outputs the name and uniqe code of this object
     * @return string
     */
    public function __toString()
    {
        return 'object of type: '.$this->getClass().' hashCode: '.$this->hashCode();
    }

}

答案 2 :(得分:2)

这将是stdClass(不是基类ftm)。

请注意,您只能typecaststdClass而不是任何其他类,例如这将有效

$obj = (object) array( 'foo' => 'bar' );

但不是

$observer = (Observer) new Subject;

引用手册:

  

如果将对象转换为对象,则不会对其进行修改。如果将任何其他类型的值转换为对象,则会创建stdClass内置类的新实例。如果值为NULL,则新实例将为空。数组转换为具有按键和相应值命名的属性的对象。对于任何其他值,名为标量的成员变量将包含该值。

好吧,除非你愿意利用黑魔法和不可靠的黑客攻击,例如:

答案 3 :(得分:0)

Ciaran answer is helpful,

  

尽管另外两个答案   比方说,stdClass不是基类   用于PHP中的对象。这可以   很容易证明:

class Foo{} 
$foo = new Foo(); 
echo ($foo instanceof stdClass)?'Yes':'No';
  

它输出'N'stdClass只是一个   通用的'空'类,用于何时   将其他类型转换为对象。的 我   不相信有一个概念   PHP中的基础对象

答案 4 :(得分:-2)

由于PHP没有类型声明,因此不需要全局基类。没有什么可做的:只需声明变量并使用它们。