Php 简明教程
PHP - Compound Types
PHP 中的数据类型可以是“标量类型”或“复合类型”。整数、浮点数、布尔值和字符串类型为标量类型,而数组和对象类型归类为复合类型。复合类型中的单个变量可以存储多种类型的值。
在 PHP 中,对象和数组是两种复合数据类型。
-
数组是有序集合,其中包含其他数据类型的元素,这些元素不一定相同。
-
对象是内置类或用户定义类的实例,由属性和方法组成。
Arrays in PHP
数组是一种数据结构,其中一个变量存储了一个或多个数据值。PHP 中的数组是有序映射,它将值与键关联。
-
PHP 中有两种声明数组的方法。一种是使用内置的 array() 函数,另一种是将数组元素置于方括号内。
-
仅包含值集合的数组称为 indexed array 。每个值由从 0 开始的位置索引标识。
-
如果数组是键值对集合,则称为 associative array 。该对的关键组成部分可以是数字或字符串,而值部分可以是任何类型。
The array() Function in PHP
内置 array() 函数使用提供给它的参数并返回数组类型对象。一个或多个以逗号分隔的参数是数组中的元素。
array(mixed ...$values): array
括号中的每个值可以是单个值(可能是数字、字符串、任何对象,甚至另一个数组),或键值对。键与其值之间的关联由“⇒”符号表示。
Using Square Brackets [ ]
除了 array() 函数之外,还可以将以逗号分隔的数组元素置于方括号内以声明数组对象。在这种情况下,元素也可以是单个值、字符串或另一个数组。
$arr1 = [10, "asd", 1.55, true];
$arr2 = ["one"=>1, "two"=>2, "three"=>3];
$arr3 = [
[10, 20, 30],
["Ten", "Twenty", "Thirty"],
["physics"=>70, "chemistry"=>80, "maths"=>90]
];
Accessing Array Elements
要从给定数组访问任何元素,可以使用 array[key] 语法。对于索引数组,将索引置于方括号内,因为索引本身就是键。
<?php
$arr1 = [10, 20, 30];
$arr2 = array("one"=>1, "two"=>2, "three"=>3);
var_dump($arr1[1]);
var_dump($arr2["two"]);
?>
它将生成以下 output −
int(20)
int(2)
Array Traversal in PHP
还可以使用 foreach 循环来迭代索引数组。
<?php
$arr1 = [10, 20, 30, 40, 50];
foreach ($arr1 as $val){
echo "$val\n";
}
?>
它将生成以下 output −
10
20
30
40
50
请注意,PHP 在内部将索引数组视为关联数组,其中索引被视为键。此事实可以通过数组的 var_dump() 输出得到验证。
我们可以使用 foreach 语法将索引数组的每个元素解包为键和值变量 −
<?php
$arr1 = [10, 20, 30, 40, 50];
foreach ($arr1 as $key => $val){
echo "arr1[$key] = $val" . "\n";
}
?>
它将生成以下 output −
arr1[0] = 10
arr1[1] = 20
arr1[2] = 30
arr1[3] = 40
arr1[4] = 50
foreach 循环还用于遍历关联数组,尽管任何其他类型的循环也可以通过某种操作使用。
让我们看一下 foreach 循环实现,每个 k-v 对在两个变量中解包。
<?php
$capitals = array(
"Maharashtra"=>"Mumbai",
"Telangana"=>"Hyderabad",
"UP"=>"Lucknow",
"Tamilnadu"=>"Chennai"
);
foreach ($capitals as $k=>$v) {
echo "Capital of $k is $v" . "\n";
}
?>
它将生成以下 output −
Capital of Maharashtra is Mumbai
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai
Objects in PHP
在 PHP 中,对象是一种复合数据类型。它是内置或用户定义类的实例。下面是一个简单的 PHP 类 −
class SayHello {
function hello() {
echo "Hello World";
}
}
要声明类的对象,我们需要使用 new 操作符。
$obj=new SayHello;
我们现在可以调用它的方法 −
<?php
class SayHello {
function hello() {
echo "Hello World". PHP_EOL;
}
}
$obj=new SayHello;
var_dump(gettype($obj));
$obj->hello();
?>
它将生成以下 output −
string(6) "object"
Hello World
stdClass
PHP 提供 stdClass 作为一个通用的空类,它可用于动态添加属性和转换。stdClass 的对象开始时为 null。我们可以动态地向其中添加属性。
<?php
$obj=new stdClass;
$obj->name="Deepak";
$obj->age=21;
$obj->marks=75;
print_r($obj);
?>
它将生成以下 output −
stdClass Object (
[name] => Deepak
[age] => 21
[marks] => 75
)
Array to Object Conversion in PHP
PHP 中的数组可以按如下方式强制转换成对象 −
<?php
$arr=array("name"=>"Deepak", "age"=>21, "marks"=>75);
$obj=(object)$arr;
print_r($obj);
?>
它将生成以下 output −
stdClass Object (
[name] => Deepak
[age] => 21
[marks] => 75
)
Object to Array Conversion in PHP
相反,对象可以强制转换成数组。请看以下示例 −
<?php
$obj=new stdClass;
$obj->name="Deepak";
$obj->age=21;
$obj->marks=75;
$arr=(array)$obj;
print_r($arr);
?>
它将生成以下 output −
Array
(
[name] => Deepak
[age] => 21
[marks] => 75
)
Scalar Type to Object Type Conversion in PHP
任何标量类型的变量也可以通过类型转换转换成对象。标量变量的值将成为对象标量属性的值。
<?php
$name="Deepak";
$age=21;
$percent=75.50;
$obj1=(object)$name;
print_r($obj1);
$obj2=(object)$age;
print_r($obj2);
$obj3=(object)$percent;
print_r($obj3);
?>
它将生成以下 output −
stdClass Object
(
[scalar] => Deepak
)
stdClass Object
(
[scalar] => 21
)
stdClass Object
(
[scalar] => 75.5
)