在java中,我们有Object类型,可用于转换为特定的类类型。 我们如何在PHP中执行此操作?
此致 Mithun
答案 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)。
请注意,您只能typecast到stdClass
而不是任何其他类,例如这将有效
$obj = (object) array( 'foo' => 'bar' );
但不是
$observer = (Observer) new Subject;
引用手册:
如果将对象转换为对象,则不会对其进行修改。如果将任何其他类型的值转换为对象,则会创建stdClass内置类的新实例。如果值为NULL,则新实例将为空。数组转换为具有按键和相应值命名的属性的对象。对于任何其他值,名为标量的成员变量将包含该值。
好吧,除非你愿意利用黑魔法和不可靠的黑客攻击,例如:
答案 3 :(得分:0)
尽管另外两个答案 比方说,stdClass不是基类 用于PHP中的对象。这可以 很容易证明:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Yes':'No';
它输出'N'stdClass只是一个 通用的'空'类,用于何时 将其他类型转换为对象。的 我 不相信有一个概念 PHP中的基础对象
答案 4 :(得分:-2)
由于PHP没有类型声明,因此不需要全局基类。没有什么可做的:只需声明变量并使用它们。