📜  PHP |对象到其他类的对象的类型转换和转换(1)

📅  最后修改于: 2023-12-03 15:33:35.584000             🧑  作者: Mango

PHP |对象到其他类的对象的类型转换和转换

在PHP中,一个对象可以转换成其他类型的对象。这个过程叫做类型转换。

强制类型转换

PHP中的强制类型转换可以通过在变量名前使用目标类型的名称来实现。可以将一个对象转换为一个字符串、一个整数、一个浮点数、一个布尔值、一个数组或者一个NULL。

对象转字符串

使用__toString()魔术方法可以将一个对象转换为一个字符串。__toString()方法必须返回一个字符串。

class Person {
	private $name;

	public function __construct($name) {
		$this->name = $name;
	}

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

$person = new Person('James Bond');
echo (string)$person; // 输出 'James Bond'
对象转整数和浮点数

使用(int)(float)运算符可以将一个对象转换为整数和浮点数。

class Person {
	private $age;

	public function __construct($age) {
		$this->age = $age;
	}

	public function getAge() {
		return $this->age;
	}
}

$person = new Person(30);
echo (int)$person->getAge(); // 输出 30
echo (float)$person->getAge(); // 输出 30.0
对象转布尔值

如果一个对象被强制转换为布尔值,则其值永远为真。只有空对象才会被认为是假。

class Person {
}

$person = new Person();
var_dump((bool)$person); // 输出 true

$emptyPerson = null;
var_dump((bool)$emptyPerson); // 输出 false
对象转数组

可以使用(array)运算符将一个对象转换为数组。如果类定义了一个__toArray()方法,则该方法将被调用。否则,对象的公共属性将成为数组的一部分。私有和受保护属性无法访问。

class Person {
	public $name;
	private $age = 30;
}

$person = new Person();
$person->name = 'James Bond';

print_r((array)$person);
/*
输出:
Array
(
    [name] => James Bond
)
*/
对象转NULL

使用(unset)运算符将一个对象转换为NULL。

class Person {
	public $name;
}

$person = new Person();
$person->name = 'James Bond';

unset($person->name);

var_dump($person->name); // 输出 NULL
类类型转换

假设有两个类A和B,可以将A类的对象转换为B类的对象,反之亦然。

类型强制转换

使用(B)$a运算符可以将A类的对象转换为B类的对象。为了进行此转换,A类必须定义了一个__toB()魔术方法(其中B是目标类的名称)。

class A {
	public $name = 'James Bond';
}

class B {
	private $name;

	public function __construct(A $a) {
		$this->name = $a->name;
	}

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

$a = new A();
$b = (B)$a;

echo $b->getName(); // 输出 'James Bond'
instanceof运算符

可以使用instanceof运算符判断一个对象是否是一个类的实例。

class A {
}

class B {
}

$a = new A();
$b = new B();

var_dump($a instanceof A); // 输出 true
var_dump($b instanceof A); // 输出 false
总结

在PHP中,可以将一个对象转换为其他类型的对象。在可以进行类型强制转换的情况下,会尝试调用魔术方法来进行转换。此外,还可以将一个类的对象强制转换为另一个类的对象。