php编程 之 php基础一
1,语法
PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码
比如下面这个:这是一个简单的 PHP 文件实例,它可以向浏览器输出文本 "Hello World!"
<!DOCTYPE html> <html> <body> <h1>My first PHP page</h1> <?php echo "Hello World!"; ?> //print也可以表示输出,//表示注释,和#用于注释是一样的。 </body> </html>
注意:PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
规则:
1,PHP 脚本以 <?php 开始,以 ?> 结束
2,echo 和print都可以表示在浏览器中输出文本
3,//单行注释,/* 多行注释*/。
2,变量
<?php $x=5; $y=6; $z=$x+$y; echo $z; ?>
规则:
1,$后紧跟变量,变量名必须以字母或者下划线字符开始,变量名可以包含:数字,字母和下划线,字母区分大小写
2,变量用等号赋值,变量在第一次被声明的时候就被创建了。
3,我们不必向 PHP 声明变量的数据类型。PHP 会根据变量的值,自动把变量转换为正确的数据类型。当然,赋值字符串变量的时候还是需要加引号,比如
<?php $txt="Hello world!"; $x=5; $y=10.5; ?>
3,作用域
<!DOCTYPE html> <html> <body> <?php $x=5; //这是函数以外的全局变量 function myTest() { global $x; //函数内部想要访问的时候还需要global一下,否则不予显示 $y=10; echo "test result:"; echo "$x"; //换行符是<br>如果不加换行符,默认连续输出,就像:510hello dahu! echo "$y"; } myTest(); //调用函数 echo "Hello dahu!"; ?> </body> </html>
拓展:PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
4,static作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。那就要用static标志一下这个变量。
<?php function myTest() { static $y=10; //声明一下,希望函数结束的时候$y的值得以保存,
//以便下次再调用这个函数的时候,$y在上一次运行的基础上继续 $x=5; echo $x; //每次调用的时候$x都是新的,都是5 echo $y; //$y被调用了三次,每次的值分别是:10,11,12 $y++; } myTest(); myTest(); myTest(); ?>
注意:该函数依然是局部变量,它不会成为全局变量,再一次调用myTest函数时,$y的值会在上一次调用的基础上继续使用。
5,参数
参数的作用是通过调用代码把值传递给函数,是一个局部变量。
<?php function myTest($x) { echo $x; } myTest("hello dahu!"); ?>
6,echo和print
echo和print都是输出的,区别在于echo可以输出一个或者多个字符串,速度比较快,而print智能输出一个字符串,而且返回值总是为1;
<?php $y="hello daqing"; $x="hi dahu"; $z=666; echo $y,$x,$z,"<br>"; //print $y,$x,$z,"<br>"; print只能输出一个字符串 echo "let me echo $y <br>"; print "let me echo $y <br>"; ?>
7,PHP EOF(heredoc)使用说明
PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字串的方法。
<?php $y="hello daqing"; $a=<<<EOF <br> <html><title>untitled document</title> echo $y //输出形如:echo hello daqing hello,{$y} //输出形如:hello,hello daqing EOF; echo $a ?>
<?php $name="runoob"; $a= <<<EOF "abc" $name //输出形如:"abc" runoob "123" EOF; // 结束需要独立一行且前后不能空格 echo $a; ?>
<?php echo <<<EOF <h1>我的第一个标题</h1> <p>我的第一个段落。</p> EOF; // 结束需要独立一行且前后不能空格 ?>
//输出结果:
我的第一个标题
我的第一个段落
注意:上面三行代码的注释部分是后来添加的,不要带着注释去运行
EOF语法:
1,开始标志:“<<<EOF”后面不加任何东西,包括空格,结束“EOF;”独占一行,没空格。
2,位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。
3,.heredoc常用在输出包含大量HTML语法d文档的时候。比如:函数outputhtml()要输出HTML的主页,就可以写成如下格式:(注意,EOF内的html可以被解析。)
function outputhtml() { echo <<<EOT <html> <head><title>主页</title></head> <body>主页内容</body> </html> EOT; } outputhtml();
8,数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
测试函数: var_dump() 函数返回变量的数据类型和值。(如果是八进制或者16进制的整数,会自动换算成十进制)
<?php $s='lala'; var_dump($s); echo "<br>"; $x=234; var_dump($x); ?>
我的结果是:C:\xampp\htdocs\daqing_new\daqing_test.php:7:string 'lala' (length=4)
C:\xampp\htdocs\daqing_new\daqing_test.php:10:int 234
详解:
1,字符串,放在单双引号里,
2,整数型,要有数字没有小数点,可正可负,三种格式:十进制,十六进制(0x为前缀),或者八进制(0为前缀)
3,浮点数,支持科学计数,如:2.4e3=2.4*10的3次方,8E-5=8*10的负5次方
4,布尔型,$x=true 或者false,通常用于条件判断
5,数组,array,一组同类型的集合
<?php $cars=array("Volvo","BMW","Toyota"); var_dump($cars); //输出array (size=3)等详细信息
echo $cars[0] //数组的下标从0开始
?>
6,对象,对象数据类型也可以用于存储数据。在 PHP 中,对象必须声明。必须使用class关键字声明类对象。类是可以包含属性和方法的结构,我们在类中定义数据类型,然后在实例化的类中使用数据类型。
<?php class Person { //人的成员属性 var $name; //人的名字 var $age; //人的年龄 //人的成员 say() 方法 function say() { echo "我的名字叫:".$this->name."<br>"; //相当于python中的self.name echo "我的年龄是:".$this->age; } } //类定义结束 //实例化一个对象,记得类名前面加上new $p1 = new Person(); //给 $p1 对象属性赋值 $p1->name = "张三"; //相当于python中的,实例名.类属性名的那种格式 $p1->age = 20; //调用对象中的 say()方法 $p1->say(); ?>
7,null:NULL 值表示变量没有值。
9,常量
常量值被定义后,在脚本的其他任何地方都不能被改变。一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
语法:使用函数define()
define ( string $name , mixed $value [, bool $case_insensitive = false ] )
define()的三个参数分别是name,value, 大小写敏感(case_insensitive,默认区分大小写,默认false,如果设置成true,那就表示大小写不区分)
实例:
<?php // 区分大小写的常量名 define("GREETING", "欢迎访问 daqing.com",true); echo GREETING; // 输出 "欢迎访问 daqing.com" echo '<br>'; echo greeting; // 输出"欢迎访问 daqing.com",不区分大小写
?>
注意,常量是全局变量,在函数内部也可以毫无障碍的使用。
10 字符串相关的函数:
字符串的运算符:. 并置运算符。
实例:
<?php $txt1="hello"; $txt2="daqing!"; echo $txt1." ".$txt2; //txt1和空格并置,然后和txt2并置 ?>
//结果:hello daqing!
字符串长度函数:strlen()
实例:
<?php $txt1="hello"; $txt2="daqing!"; echo strlen($txt1); //返回长度5 ?>
字符串查找函数:strpos()
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
实例:
<?php $txt1="hello"; echo strpos($txt1,'e'); ?> //返回‘e'所在的位置1。
11 运算符
基本运算符:+,-,*,/,%,.,加减乘除取余,并置。
注意,它的除法不是地板除。php7版本新增了整除函数,intdiv(),用法:echo (intdiv(10,3));
实例:
<?php $x=10; $y=6; echo ($x + $y); // 输出16 echo '<br>'; // 换行 echo ($x - $y); // 输出4 echo '<br>'; // 换行 echo ($x * $y); // 输出60 echo '<br>'; // 换行 echo ($x / $y); // 输出1.6666666666667 echo '<br>'; // 换行 echo ($x % $y); // 输出4 echo '<br>'; // 换行 echo -$x; //输出-10 ?>
赋值运算符:和python差不多
运算符 | 等同于 | 描述 |
---|---|---|
x = y | x = y | 左操作数被设置为右侧表达式的值 |
x += y | x = x + y | 加 |
x -= y | x = x - y | 减 |
x *= y | x = x * y | 乘 |
x /= y | x = x / y | 除 |
x %= y | x = x % y | 模(除法的余数) |
a .= b | a = a . b | 连接两个字符串 |
实例:
<?php $x=10; echo $x; // 输出10 $y=20; $y += 100; echo $y; // 输出120 $z=50; $z -= 25; echo $z; // 输出25 $i=5; $i *= 6; echo $i; // 输出30 $j=10; $j /= 5; echo $j; // 输出2 $k=15; $k %= 4; echo $k; // 输出3 ?>
递增/递减运算符:
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
-- x | 预递减 | x 减 1,然后返回 x |
x -- | 后递减 | 返回 x,然后 x 减 1 |
实例;
<?php $t=10; echo ++$t; //$t是递增的,$t每次+1赋值给自己。返回11 echo "<br>"; $s=10; echo --$s; //$t是递减的,每次-1赋值给自己,返回9 ?>
比较运算符:
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5==="5" 返回 false |
x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
x !== y | 绝对不等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!=="5" 返回 true |
x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
实例:
<?php $x=100; $y="100"; var_dump($x == $y); //返回true echo "<br>"; var_dump($x === $y); //绝对等于,如果 x 等于 y,且它们类型相同,则返回 true,执行结果false echo "<br>"; var_dump($x != $y); //返回false echo "<br>"; var_dump($x !== $y); //返回true,绝对不等于还要判断他们的类型是否相同 echo "<br>"; $a=50; $b=90; var_dump($a > $b); //返回false echo "<br>"; var_dump($a < $b); //返回true ?>
逻辑运算符:
数组运算符:
运算符 | 名称 | 描述 |
---|---|---|
x + y | 集合 | x 和 y 的集合 |
x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
x != y | 不相等 | 如果 x 不等于 y,则返回 true |
x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
实例:
<?php $x = array("a" => "red", "b" => "green"); $y = array("c" => "blue", "d" => "yellow"); $z = $x + $y; // $x 和 $y 数组合并 var_dump($z); //数组不好打印,用var_dump()看吧 var_dump($x == $y); var_dump($x === $y); var_dump($x != $y); var_dump($x <> $y); var_dump($x !== $y); ?>
//返回值依次是:
//array(4) { ["a"]=> string(3) "red" ["b"]=> string(5) "green" ["c"]=> string(4) "blue" ["d"]=> string(6) "yellow" }
//bool(false) bool(false) bool(true) bool(true) bool(true)
三元运算符
语法:
(expr1) ? (expr2) : (expr3)
意思是:expr1 值为 TRUE 时执行 expr2,expr1 求值为 FALSE 时执行 expr3。
实例:
<?PHP $a=10; $b=20; $c=$a>$b?($a-$b):($a+$b); //说明:如果变量a大于变量b则执行问号后面的,否则就执行:冒号后面的 echo $c; ?>
当然写得长一点也没问题,比如:$a
>
$b
?
$x
=(
$a
<
$c
?
$c
-
$a
:
$a
-
$c
) :
$x
=(
$b
<
$c
?
$c
-
$b
:
$b
-
$c
);
组合比较符:
语法:$a<=>$b
如果$a > $b, 返回的值为1
如果$a == $b, 返回的值为0
如果$a < $b, 返回的值为-1
组合比较符也适用于字符串,字符串比较的时候,b大于a。和python一样。
运算优先级表:
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
说明:运算的时候,左 = 从左到右,右 = 从右到左。
运算方向 | 运算符 | 附加信息 |
---|---|---|
无 | clone new | clone 和 new |
左 | [ | array() |
右 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 |
无 | instanceof | 类型 |
右 | ! | 逻辑运算符 |
左 | * / % | 算术运算符 |
左 | + – . | 算术运算符和字符串运算符 |
左 | << >> | 位运算符 |
无 | == != === !== <> | 比较运算符 |
左 | & | 位运算符和引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ? : | 三元运算符 |
右 | = += -= *= /= .= %= &= |= ^= <<= >>= => | 赋值运算符 |
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |
左 | , | 多处用到 |
括号的使用:
在php中,运算的时候,括号优先运算。