<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>类型</title>
</head>
<body>
<?php
date_default_timezone_set("Asia/Shanghai");
/**
* PHP支持8种原始数据类型
* 四种标量:
* 1. boolean(布尔型)
* 2. integer(整型)
* 3. float(浮点型,也称作double)
* 4. string(字符串)
* 两种复合类型:
* 1. array(数组)
* 2. object(对象)
* 两种特殊类型:
* 1. resource(资源)
* 2. NULL(无类型)
* 确保代码的易读性:
* 1. mixed(混合类型):说明一个参数可以接受多种不同的(但不一定是所有的)类型
* 2. number(数字类型):说明一个参数可以是 integer 或者 float
* 3. callback(回调类型)
* tips: gettype()获取数据类型,is_string()、is_int()等is_type函数可以判断是否是指定类型
*/
function demo() {
$a_bool = TRUE;
$a_str = "foo";
$a_str2 = "foo";
$an_int = 12;
echo gettype($a_bool);
echo "<br>";
echo gettype($a_str);
echo "<br>";
echo gettype($a_str2);
echo "<br>";
echo "a_str2的值: ".gettype($an_int);
echo "<br>";
echo "<br>";
echo "转换为整形后的a_str2的值: ".gettype($a_str2);
echo "<br>";
echo "<br>";
if (is_int($an_int)) {
$an_int +=4;
}
if (is_string($a_bool)) {
echo "String: $a_bool ";
}
}
// demo();
/**
* Boolean 布尔类型
* 语法:要指定一个布尔值,使用关键字 TRUE 或 FALSE 。两个都不区分大小写
* tips:
* 1. 通常运算符所返回的boolean值结果会被传递给控制流程
* 2. 当转换为boolean时,以下值被认为是FALSE:
* 2.1 布尔值FALSE本身
* 2.2 整型值0
* 2.3 浮点型值0.0
* 2.4 空字符串,以及字符串"0"
* 2.5 不包括任何元素的数组
* 2.6 特殊类型NULL(包括尚未赋值的变量)
* 2.7 从空标记生成的SimpleXML变量
* 3. 所有其他值都被认为是TRUE(包括任何资源)
*/
function demo2() {
class A{
}
$ins_a = new A();
// 语法
$foo = TRUE;
// 转换为布尔值
var_dump((bool)""); //false
echo "<br>";
var_dump((bool)1); //true
echo "<br>";
var_dump((bool)-2); //true
echo "<br>";
var_dump((bool)"foo"); //true
echo "<br>";
var_dump((bool)[]); //false
echo "<br>";
var_dump((bool)$ins_a); //true
echo "<br>";
var_dump((bool)"false"); //true
}
// demo2();
/**
* Interger整型
* 语法:整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
* tips:
* 1. 整数溢出:如果给定的一个数超出了 integer 的范围,将会被解释为 float 。同样如果执行的运算结果超出了 integer 范围,也会返回 float
* 2. 强制类型转换(int)
* 3. 使用函数转换intval()获取整数值,未获取到值则为0
* 4. 其他类型转换为整型
* 4.1 布尔值转换:FALSE为0,TRUE为1
* 4.2 浮点型转换:当从浮点数转换成整数时,将向下取整
* 4.3 字符串转换:只取字符串首部数字
*/
function demo3() {
$a = 1234; //十进制
$a = -123; //负数
$a = 0123; //八进制
$a = 0x1A; //十六进制
var_dump(25/7); //float(3.5714285714286)
echo "<br>";
var_dump((int)(25/7)); //强制转换为整型int(3)
echo "<br>";
var_dump(round(25/7)); //round()四舍五入值float(4)
echo "<br>";
// 转换为整型
$str = "dadas1";
$str2 = "22dadas";
var_dump(intval($str));
echo "<br>";
var_dump(intval($str2));
echo "<br>";
// 决不要将未知的分数强制转换为 integer ,这样有时会导致不可预料的结果
echo (int) ( ( 0.1 + 0.7 ) * 10 ); // 显示 7!
}
// demo3();
/**
* Float浮点型
* 语法:也叫浮点数 float,双精度数 double 或实数 real
* tips: 浮点数计算使用绝对值abs()
*/
function demo4() {
$a = 1.234;
$b = 1.2e3; //科学计数法
$c = 7E-10;
// 比较浮点数
$aa = 1.23456789;
$bb = 1.23456780;
$epsilon = 0.00001;
echo "浮点数计算: ".($aa - $bb);
echo "<br>";
if (abs($aa - $bb) < $epsilon) {
echo "true";
} else {
echo "false";
}
}
// demo4();
/**
* String字符串
* 语法:一个字符串可以用4种方式表达:
* 1.单引号: 变量和特殊字符的转义序列将不会被替换
* 2.双引号: 解析特殊字符、变量等
* 3.heredoc语法结构: 类似双引号
* 4.nowdoc语法结构: 类似单引号
* tips:
* 1. 转换成字符串
* 1.1 整数或浮点数被转换为数字的字面样式的string
* 1.2 布尔值true转换为'1',false转换为''
* 1.3 数组转换为'Array'字符串
* 1.4 对象转换为'Object'字符串
* 1.5 资源转换为'Resource id #1',1为资源id
* 1.1 NULL转换为''
* 2. 一个值可以通过(string)或strval()强制转换为字符串
*
*/
function demo5() {
echo '\t'; //单引号不会解析
echo '<br>';
echo "转义字符缩进\t生效"; //双引号会解析
echo '<br>';
echo 'said: "I\'ll be back"' ; //said: "I'll be back"
echo '<br><hr>';
// Heredoc结构
$syn = 'syntax';
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc {$syn}.
EOD;
echo $str;
echo '<br><hr>';
// Nowdoc结构
$str2 = <<<'EOD'
Example of string
spanning multiple lines
using heredoc {$syn}.
EOD;
echo $str2;
echo '<br><hr>';
// 简单的变量解析
$var = 'xxl';
echo "your name is $var";
echo '<br>';
// 复杂的变量解析,添加花括号'{}','{'和'$'之间不能有空格
echo "your name is {$var}";
echo '<br>';
echo "your name is ${var}";
echo '<br>';
class beers {
const softdrink = 'rb';
public static $ale = 'ipa';
}
$rb = 'A & W';
$ipa = 'AXL';
echo "值: {${beers :: softdrink}} <br>";
echo "值: {${beers :: $ale}}";
echo '<br><hr>';
// 索引值必须为整数,否则会报警告
$str = 'abc' ;
var_dump ( $str [1]);
var_dump (isset( $str [1]));
}
// demo5();
/**
* Array数组
* tips:
* 1. key的强制转换:
* 1.1 浮点会转整型
* 1.2 布尔值会转整型,true1,false0
* 1.3 包含有合法整型值的字符串会被转换为整型
* 1.4 NULL转''
* 2. 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了
*/
function demo6() {
$arr = array(
1 => 'a',
'1' => 'b',
1.5 => 'c',
true => 'd',
);
var_dump($arr); // array(1) { [1]=> string(1) "d" }
echo '<br>';
array_push($arr, 'ab');
var_dump($arr);
echo '<br>';
$arr[] = 'cd';
var_dump($arr);
echo '<br>';
unset($arr[1]);
var_dump($arr);
echo '<br><hr>';
// []赋值和索引重置,unset()数组后,数组不会重建索引,要重建索引可以使用array_values()
// 创建一个简单的数组
$array = array( 1 , 2 , 3 , 4 , 5 );
print_r ( $array );echo '<br>';
// 现在删除其中的所有元素,但保持数组本身不变:
foreach ( $array as $i => $value ) {
unset( $array [ $i ]);
}
print_r ( $array );echo '<br>';
// 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
$array [] = 6 ;
print_r ( $array );echo '<br>';
// 重新索引:
$array = array_values ( $array );
$array [] = 7 ;
print_r ( $array );
echo '<br><hr>';
$c1 = array(2, 3);
$c2 = $c1;
$c2[] = 4;
print_r($c1);echo '<br>';
print_r($c2);echo '<br><br>';
$c3 = &$c1;
$c3[] = 4;
$c3[] = 5;
print_r($c1);echo '<br>';
print_r($c3);
}
// demo6();
/**
* Object对象
*/
function demo7() {
}
// demo7();
/**
* Resource资源类型
* 转换为资源:由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
* tips: 持久数据库连接比较特殊,它们不会被垃圾回收系统销毁
*/
function demo8() {}
/**
* NULL类型
* 语法:NULL 类型只有一个值,就是不区分大小写的常量 NULL
* tips:
* 1. is_null()判断是否是NULL
* 2. 下列情况下一个变量被认为是NULL:
* 2.1 被赋值NULL
* 2.2 尚未被赋值
* 2.3 被unset()
* 3. 转到NULL (unset)变量
*/
function demo9() {
$var = NULL;
echo $var;
echo is_null($var);
echo '<br>';
$b = 123;
echo $b;
echo '<br>';
$b = (unset)$b; //转到NULL
echo is_null($b);
}
// demo9();
/**
* Callback回调类型
* tips:
* 1. call_user_func(callable $callback [,mixed $parameter [,mixed $...]])把第一个参数作为回调函数调用
* 2. create_function() 可以用来创建一个匿名回调函数
* 3. 在函数中注册有多个回调内容时(如使用 call_user_func() 与 call_user_func_array() ),如在前一个回调中有未捕获的异常,其后的将不再被调用
*/
function demo10() {
function my_callback_function () {
echo 'hello world!<br>';
}
class MyClass {
static function myCallbackMethod () {
echo 'hello world!<br>';
}
}
// 传入函数名
call_user_func('my_callback_function');
// 传入数组,包含类名和静态方法名
call_user_func(array('MyClass', 'myCallbackMethod'));
// 传入数组,包含对象下的静态方法名
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// 传入调用静态方法
call_user_func('MyClass::myCallbackMethod');
// 类继承,调用静态方法
class A {
public static function who () {
echo 'A<br>';
}
}
class B extends A {
public static function who () {
echo 'B<br>';
}
}
call_user_func(array('B', 'who'));
call_user_func(array('B', 'parent::who'));
echo '<br><hr>';
// 匿名函数
$double = function ($a) {
return $a * 2;
};
$nums = range ( 1 , 5 );
$new_nums = array_map($double, $nums);
print_r($new_nums);
print_r(implode($new_nums));
}
// demo10();
/**
* 类型转换的判别
* tips:
* 1. 允许的强制转换有
* 1.1 (int), (integer) - 转换为整形 integer
* 1.2 (bool), (boolean) - 转换为布尔类型 boolean
* 1.3 (float), (double), (real) - 转换为浮点型 float
* 1.4 (string) - 转换为字符串 string
* 1.5 (array) - 转换为数组 array
* 1.6 (object) - 转换为对象 object
* 1.7 (unset) - 转换为 NULL (PHP 5)
*/
function demo11() {
$foo = "0"; //字符串(ASCII 48)
echo "foo的值为 {$foo}<br>";
$foo += 2; //整数(2)
echo "foo的值为 {$foo}<br>";
$foo = $foo + 1.3; //浮点数(3.3)
echo "foo的值为 {$foo}<br>";
$foo = 5 + "10 Little Piggies"; //整数(15)
echo "foo的值为 {$foo}<br>";
$foo = 5 + "10.1Small Pigs"; //整数(15)
echo "foo的值为 {$foo}<br>";
$foo = 5 + "Small Pigs12"; //整数(5)
echo "foo的值为 {$foo}<br>";
}
demo11();
?>
</body>
</html>
PHP:类型
最新推荐文章于 2025-06-12 23:55:10 发布