PHP 中的标量和复合数据类型到底是什么?

What really are scalar and compound data types in PHP?

提问人:Grizzly 提问时间:7/26/2023 更新时间:7/27/2023 访问量:65

问:

我知道数组和对象是复合的,因为其中可以存储多个值,而标量是“原始”数据,即单个值。

但是复合类型真的是对象吗?

例如,在 Java 中,几乎所有东西都是一个对象,一个对象,一个 、 一个 、 一个 、 一个等。它们是否继承自 Object?ArrayclassMapArrayArrayObjectMap

还是它们只是“特殊”物体?

在哪里可以找到有关此内容的更多信息?

谢谢你:)

PHP 对象 类型 标量 complex-data-types

评论

0赞 nice_dev 7/26/2023
它们是否继承自 Object?PHP中没有这样单一的最高父类。Java 完全是 OOP(虽然不是完全纯的,但仍然如此)。PHP 涉及过程和 OOP 风格。我认为PHP在设计之初并不意味着默认为OOP风格。
1赞 Álvaro González 7/26/2023
对于它的价值,你在 is_scalar() 有一个列表。

答:

0赞 Nadir Belhaj 7/26/2023 #1

要回答这个问题:

但是复合类型真的是对象吗?

答:对象是PHP中的复合数据类型之一,但并非所有复合数据类型都是对象。每种复合数据类型都有特定的用途,用于处理 PHP 中不同类型的数据结构。

初学者的更多详细信息: 标量数据类型表示单个值,这意味着它们一次只能保存一个值。PHP 有四种标量数据类型:

$integerVar = 25;
$floatVar = 6.12;
$stringVar = "Do you know, PHP can go Native ?";
$booleanVar = false;

复合数据类型可以包含多个值或值的集合。PHP 有两种主要的复合数据类型:

// Array
$colors = array("blue", "red", "green");

// Object (casting an array)
$colors = (object)array("blue", "red", "green");

// Object (using a simple stdClass object)
$person = new stdClass();
$person->name = "Adam";
$person->age = 90;

// Object (e.g., a database connection)
$dbConnection = new mysqli("localhost", "login", "password", "database");
echo $dbConnection->server_info, "\n";
0赞 hakre 7/27/2023 #2

但是复合类型真的是对象吗?

给定数组和对象两种复合类型(参见JSON构建的两个结构),那么在PHP中,这是一个明确的否定:数组是数组(数组或关联数组/哈希图),只有对象才是真正的对象。

String 是 PHP 命名法中的标量,而不是数组。没有 char 类型。

[...]但是在PHP中,会发生类似的事情吗?[...]它们是否继承自 Object?

对于 Array()(现在的 []),没有任何东西继承自 object。

但是,您可以从实现 ArrayAccess、Countable 和 Traversable 的类创建对象,以创建类似数组的东西,然后它就是一个对象。

$object = new ArrayObject(['A']);

尽管如此,仍然没有一个超类,PHP 有 is_object() test、instanceof 运算符和对 object 的类型声明支持

标准 PHP 库 (SPL) 和 PHP 核心中也有一些接口+类层次结构:

在哪里可以找到有关此内容的更多信息?

在 PHP 手册、语言参考标准 PHP 库 (SPL) 中。


引用: