输出几个$_SERVER的信息
<?php
$arr1 = array(
"PHP_SELF"=>"网页路径",
"DOCUMENT_ROOT"=>"站点路径",
"SERVER_NAME"=>"服务器名",
"REMOTE_ADDR"=>"客户端IP",
"SERVER_ADDR"=>"服务器IP"
);
echo "<table border='1'>";
foreach ($arr1 as $key => $value) {
echo "<tr>";
echo "<td>$key</td>";
echo "<td>\$_SERVER['$key']</td>";
echo "<td>" . $_SERVER["$key"] . "</td>";
// echo "<td>" . $_SERVER[$key] . "</td>";
echo "<td>" . $value . "</td>";
echo "</tr>";
}
echo "</table>";
?>
计算器改进
// index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$val1 = "";
$val2 = "";
$result = "";
$symbol = "";
if($_POST) {// 有提交数据时才执行
$val1 = $_POST['val1'];
$val2 = $_POST['val2'];
$symbol = $_POST['symbol'];
if(is_numeric($val1) && is_numeric($val2)) {// 判断是否为数字
switch ($symbol) {
case '+':
$result = $val1 + $val2;
break;
case '-':
$result = $val1 - $val2;
break;
case '*':
$result = $val1 * $val2;
break;
case '/':
$result = $val1 / $val2;
break;
}
// echo $result;
}
else{
echo "请输入正常的痒马号";
}
}
?>
<form method="post">
<input type="text" name="val1" value="<?php echo $val1; ?>">
<select name="symbol" id="">
<option value="+" <?php if($symbol == "+") { echo "selected"; } ?>>+</option>
<option value="-" <?php if($symbol == "-") { echo "selected"; } ?>>-</option>
<option value="*" <?php if($symbol == "*") { echo "selected"; } ?>>*</option>
<option value="/" <?php if($symbol == "/") { echo "selected"; } ?>>/</option>
</select>
<input type="text" name="val2" value="<?php echo $val2; ?>">
<input type="submit" value="提交">
<input type="text" value="<?php echo $result; ?>">
</form>
</body>
</html>
进制
// 十进制
$n = 123
// 八进制
$n = 0123
// 十六进制
$n = 0x123
进制转换
dec:十进制,bin:二进制,oct:八进制,hex:十六进制
// 十进制转二进制
decbin()
<?php
$v1 = decbin(123);
echo $v1."其类型为:".getType($v1);;
?>
// 手工转换:除2取余倒着写
$v1 = 123;
123/2 > 61 余:1
61/2 > 30 余:1
30/2 > 15 余:0
15/2 > 7 余:1
7/2 > 3 余:1
3/2 > 1 余:1
1/2 > 0 余:1
// 十进制转八进制
<?php
$v1 = decoct(178);
echo $v1;// 262
?>
// 手工转换:除8取余倒着写
$v1 = 178;
178/8 22 余:2
22/8 2 余:6
2/8 0 余:2
// 十进制转十六进制
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
<?php
$v1 = dechex(178);
echo $v1;// b2
?>
// 手工转换:除16取余倒着写
178/16 11 余:2
11/16 0 余:11
// 二进制转十进制
1234 = 1x10 3+2x10 2+3x10 1+4x10 0
10001 = 1x10 4+0x10 3...+1x10 0
浮点数
1.23E3:1.23乘以10的3次方
字符串
// 单引号可以识别的两个转移符
\\
\'
// 双引号可以识别的转移字符有
\\
\"
\n
\r
\t
\$
数组
<?php
$arr1 = array("a", "b", 'c');
foreach ($arr1 as $key => $value) {
echo $key;
echo $value."<br/>";
}
?>
对象
<?php
class Person {
public $name = "Aaayang";
public $age = 18;
public function introMe() {
echo "hello world<br/>";
echo "name:".$this -> name."<br/>";
echo "age:".$this -> age;
}
}
$person1 = new Person();
$person1 -> name = "BBB";
$person1 -> age = 22;
$person1 -> introMe();
?>
资源类型
是指对外部数据(数据库,文件,图片等)的引用,非PHP代码生成的
类型转换
自动转换是弱类型语言最基本的一个特征
if(aaa) { ... }// 转换为Boolean类型
// 强制转换
$val = (int)7.8;
位运算符
位运算符都是针对整数的二进制形式进行的
按位与
1 & 1 => 1
1 & 0 => 0
0 & 1 => 0
0 & 0 => 0
按位或
1 | 1 => 1
1 | 0 => 1
0 | 1 => 1
0 | 0 => 0
按位非
~1 => 0
~0 => 1
异或
// 相同就是0,不同就是1
1 ^ 1 => 0
0 ^ 0 => 0
1 ^ 0 => 1
0 ^ 1 => 1
按位与(不分进制)
// A & B// A和B两个普通数字,其内部会按十进制进行计算,将每一对对应的二进制数字再进行&运算之后的结果
<?php
// 一个数字的二进制通常是32位的0和1的组合,也可能是64位,为了说明问题方便,我们用8位
$r1 = 9 & 13;
// 1001
// 1101
// ----
// 1001 > 9
echo $r1;// 9
?>
按位或(不分进制)
<?php
$num = 18 | 23;
// 0001 0010
// 0001 0111
// ---------
// 0001 0111 > 23
echo $num;
?>
<?php
$val = 18 | 10;
// 0001 0010
// 0000 1010
// ---------
// 0001 1010 > 26
echo $val;
?>
按位左移运算
// 形式:A << n,A被整体左移n位,可以是普通数字,但按二进制去运算
<?php
$val = 18 << 3;
// 0001 0010,整体左移3位,移出的不要,空下来的补0,结果是1001 0000
echo $val;// 144
?>
右移运算
// A >> 2,右边移出去的不管了,左边空出来的补符号位
<?php
$val = 9 >> 2;
// 0000 1001
// 0000 0010 > 二进制转10进制:1乘以2的一次方结果是2
echo $val;// 2
?>
按位非
// 将一个数字的二进制的每一位进行取反得到的结果
按位异或
// 将一个数字的二进制的每一位进行异或得到的结果
原码、反码、补码
原码:原来的二进制码,但在实际的计算机运行过程中,常常不用原码,所以就有了补码,反码。一个二进制数的第一位是符号位,0表示整数,1表示负数。
反码:正数的反码是其本身,负数的反码就是将原码的非符号部分,每一位进行取反。
补码:正数的补码是其本身,负数的补码就是将原码的非符号部分,每一位进行取反后整体加1。
<?php
// 以8位为例子
0000 0111 > 7 -> 正数的反码:0000 0111
1000 0111 > -7 -> 负数的反码:1111 1000
0000 0111 > 7 -> 正数的补码不变
1000 0111 > -7 -> 负数的补码符号位不变,每一位取反后整体加1,1111 1000 -> 1111 1001
?>
<?php
$v1 = 5;// 即是原码,又是补码
$v2 = 3;//
$r = $v1 + $v2;
// cpu内部运算模拟实例:
// 5:0000 0101
// 3: 0000 0011
// ------------
// r: 0000 1000 > 1乘以2的3次方
$num = $v1 - $v2;// $v1 + (-$v2),计算机中减去一个数是加一个负数
// 5:0000 0101 > 5(即是原码有事补码)
// 3: 1000 0011 > 3(即是原码有事补码)
//-3: 1000 0011 > (原码)
//-3: 1111 1100 > (反码)
//
// 1111 1100
// + 1
// ---------
// 1111 1101 > (补码:负数的补码符号位不变,其余为取反后加1)
// ------------
// 0000 0101 > 5(补码)
// 1111 1101 > -3(补码)
// ---------
// 0000 0010 > 补码为2,则其原码也是2
?>
数据在CPU内部都是按补码进行运算
原码、反码、补码转换过程是系统内部的工作,且转换时符号位不变
用补码运算时(相减操作),符号位当做一个普通的二进制数参与运算
@
通常放在可能发生错误的前面抑制报错,例如连接数据库
@mysql_connect( ... ) or die("数据库连接失败")
sleep()
<?php
echo date("Y-m-d H:i:s")."<br/>";
sleep(10);
echo date("Y-m-d H:i:s");
?>
文件加载
// 如果加载文件失败、重复则有不同的处理规则
include// 引用失败时,警告并继续
include_once
require// 引用失败时,警告并终止
require_once
include "文件路径"
include("文件路径")