Correcting teacher:灭绝师太
Correction status:qualified
Teacher's comments:
字符串
区别:
<?php
//echo
echo "using echo";
echo "<hr>";
$a = print "using print";
//return value of print
echo " return ".$a;
echo "<hr>";
$b = "using echo ";
echo $b,$b;
echo "<hr>";
*注:ob_clean() 使之前代码不输出
数组
区别:
ob_clean();
$arr = [1,true,"hehe",3.14];
//数组也可这样声明
// $arr2 = Array("id"=>1,"name"=>"haha","working"=>false);
echo "using echo \$arr";
echo "<hr>";
echo $arr;
echo "<hr>";
echo "using var_dump(\$arr)";
echo "<hr>";
var_dump($arr);
echo "<hr>";
echo "using print_r(\$arr)";
echo "<hr>";
print_r($arr);
echo "<hr>";
echo "using var_export(\$arr)";
echo "<hr>";
var_export($arr);
echo "<hr>";
echo "using print_r(\$arr,true)";
print_r($arr,true);
echo "<hr>";
echo "using var_export(\$arr,true)";
var_export($arr,true);
$v1=print_r($arr,true);
$v2=var_export($arr,true);
file_put_contents("log1.txt",$v1);
file_put_contents("log2.txt",$v2);
*注:<pre></pre>标签可使内容保持文本格式输出和
var_dump() or gettype() 可以用于查看数据类型
*注:@符号在PHP中用作错误控制操作符。当表达式附加@符号时,将忽略该表达式可能生成的错误消息。
resource类型
<?php
//resource 资源类型 保存到外部资源的一个引用
//fopen
$reader = fopen("log1.txt","w");
var_dump($reader);
//resource(3) of type (stream)
// 3是id stream是资源类型
//imagecreate()
$image_creater = imagecreate(100,50);
var_dump($image_creater);
//resource(4) of type (gd)
// id gd是PHP的一个库,默认打开(phpinfo()可见)
null类型
//null 表示变量没有值
$reader = null;
var_dump($reader);
//NULL
unset($image_creater);
var_dump($image_creater);
//NULL
强制类型转换
<?php
# 强制类型转换
$page = '3';
echo gettype($page);
echo "<hr>";
$newPage = (int)$page;
echo gettype($newPage);
echo "<hr>";
var_dump($newPage,(string)$newPage,(float)$newPage);
echo "<hr>";
var_dump((array)$newPage,((array)$newPage)[0]);
自动类型转换—数值
(使用+ - 运算符,计算的数据需为数值类型,如果不是数值类型,会触发自动转换)
# 自动类型转换
$a = "200pigs";
@$a += 100;
var_dump($a);
// int(300)
$a += 5.5;
var_dump($a);
// float(305.5)
$a += null + "10";
var_dump($a);
// float(315.5)
自动类型转换—字符串
(使用 . 拼接字符串,会触发自动转换为字符串)
echo "I am ". 18 ." years old ".true;
// I am 18 years old 1
自动类型转换—布尔
# if判断中,null等同于false
if (!null) {
echo "ok";
}
// ok
@settype($page,boolean);
echo "<hr>";
echo $page;
// 1
echo gettype($page);
// boolean
function add(int $a, int $b) : string {
return $a + $b;
}
var_dump(add(11.11,22.22));
// string(2) "33"
$a = 100;
$b = $a;
$c = &$a;
echo "\$a=$a, ","\$b=$b, ","\$c=$c";
echo "<hr> change a to 55: \$a=55<hr>";
$a = 55;
echo "\$a=$a, ","\$b=$b, ","\$c=$c";
echo "<hr>unset(\$a)<hr>";
echo "\$a=$a, ","\$b=$b, ","\$c=$c";
echo "<hr> change a to 99: \$a=99<hr>";
echo "\$a=$a, ","\$b=$b, ","\$c=$c";
$uname = "Tom";
var_dump(isset($uname));
//bool(true)
$uname = null;
var_dump(isset($uname));
//bool(false)
$upwd = "";
var_dump(empty($upwd));
// bool(true)
$upwd = null;
var_dump(empty($upwd));
// bool(true)
$upwd = 0;
var_dump(empty($upwd));
// bool(true)
$upwd = 1;
var_dump(empty($upwd));
// bool(false)
$upwd = false;
var_dump(empty($upwd));
// bool(true)
$upwd = true;
var_dump(empty($upwd));
// bool(false)
$a = 10;
$b = 20;
function a(){
echo $a+$b;
}
a();
//0
#在函数中使用全局变量
#1. global
function b(){
global $a, $b;
echo $a+$b;
}
b();
//30
#2. $GLOBALS[name]
function c(){
echo $GLOBALS["a"]+$GLOBALS["b"];
}
c();
//30
// $GLOBALS: 引用全局作用域中可用的全部变量
// $_SERVER: 服务器和执行环境信息
// $_GET :通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
// $_POST:当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本
// $_FILES:通过 HTTP POST 方式上传到当前脚本的项目的数组
// $_COOKIE:通过 HTTP Cookies 方式传递给当前脚本的变量的数组
// $_SESSION:当前脚本可用 SESSION 变量的数组
// $_REQUEST: 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
// $_ENV: 通过环境方式传递给当前脚本的变量的数组
例 $_GET
获取地址栏后面的参数
http://phps.com/0426/demo5.php?id=1&age=22
echo "<pre>".print_r($_GET,true)."<pre>";
<?php
# 常量 const, define(name,value)定义
const PATH = "/0426/demo4.php";
const FEMALE = "女";
define("MALE","男");
printf("性别 <br> Male %s <br> Female %s",MALE,FEMALE);
//printf() 格式化输出
# 在类中定义常量只能使用 const
class Test{
const PATH = "/0426/demo4.php";
}
get_defined_constants(true/false)
echo "<pre>".print_r(get_defined_constants(true),true)."<pre>";
(source:https://www.php.net/manual/en/language.constants.magic.php)
<?php
echo "line: ".__LINE__;
// line: 2