PHP学习笔记
php 入门教程,主要来自于菜鸟教程,入门级别,日常学习笔记。
找了一个 php
的实习,必须马上掌握啊。
# 示例
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
# 注释
<?php
// php 代码
?>
// 单行注释
/**/ 多行注释
2
3
4
5
6
# echo/print
echo // 多个 print // 一个
<?php
//两行是相同效果,<br> 看做回车
echo "Hello world! from:","Elen","<br>";
print "Hello world! from:"."Elen".'<br>';
?>
2
3
4
5
Echo,print,print_r,var_dump 区别
1.echo
输出一个或者多个字符串。
2.print
和 echo 最主要的区别: print 仅支持一个参数,并总是返回 1。
3.print_r
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
4.var_dump
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
5.var_dump 和 print_r 的区别
var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。
# EOF 定义字符串
<?php
$name="Sally";
$a= <<<EOF
"hername : " $name
"123"
EOF;
echo $a;
2
3
4
5
6
7
output:
"hername : " Sally "123"
- 结束需要独立一行且前后不能空格
- $name 经过了计算
- 空格和换行都被处理为一个空格
# PHP 类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)
<?php
// String
$a = "Hello world";
// Integer
$b = 3;
// Float
$c = 3.0;
$d = (float)$a;
// Boolean
$e = '3.0'==3; //$e 的值应该是为true,因为== 是弱比较,不关心等式左右的类型
$f = true;
// Array
$g = array('name'=>'wang','year'=>2000);
// Object
class Car
{
var $color;
function __construct($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
$h = new Car();
// NULL
$i = null;
function print_($obj) {
echo $obj,'=>',var_dump($obj),'<br>';
}
// 输出
print_($a);
print_($b);
print_($c);
print_($d);
print_($e);
print_($f);
print_($g);
var_dump($h);echo "<br>";
print_($i);
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
结果如下
Hello world=>string(11) "Hello world"
3=>int(3)
3=>float(3)
0=>float(0)
1=>bool(true)
1=>bool(true)
Array=>array(2) { ["name"]=> string(4) "wang" ["year"]=> int(2000) }
object(Car)#1 (1) { ["color"]=> string(5) "green" }
=>NULL
2
3
4
5
6
7
8
9
# 常量
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
$name:常量名
$value:值
$case_insensitive:是否对大小写敏感,true 代表不敏感
2
3
4
define("GREETING", "欢迎访问 Runoob.com"); echo GREETING; // 输出 "欢迎访问 常量默认是全局变量
# 字符串相关
//字符串合并
$txt ."+".$txt2
//字符串长度
strlen()
//字符串查找,未找到返回False
strpos("文本","查找字符") // 返回字符串位置,从0开始
2
3
4
5
6
# 条件语句
<?php
$age = 18;
$stage = array('青少年','成年','老年');
if ($age >=60)
{
$title = $stage[2];
}
elseif ($age >=18)
{
$title = $stage[1];
}
else{
$title = $stage[0];
}
echo $title,'<br><br>';
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 循环
while/do while/for /foreach
# while/do while
<?php
// while
echo "while <br>";
$x = 5;
while ($x) {
echo $x--,'<br>';
}
// do .. while
echo "do..while <br>";
$x = 5;
do
echo $x,'<br>';
while ($x--)
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
输出:
while
5
4
3
2
1
do..while
5
4
3
2
1
0
2
3
4
5
6
7
8
9
10
11
12
13
# for/ foreach
<?php
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "<br>";
}
$x=array("one"=>1,"two"=>2,"three"=>3);
foreach ($x as $key => $value)
{
echo $key," : ",$value,"<br>";
}
?>
2
3
4
5
6
7
8
9
10
11
12
输出
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5
one : 1
two : 2
three : 3
2
3
4
5
6
7
8
# 魔术常量
__LINE__: 语句所处的行号
__FILE__: 文件的完整路径(含文件名)
__DIR__: 文件的目录
__FUNCTION__: 函数名
__CLASS__: 类名
__TRAIT__: Trait 名
__METHOD__:类的方法名
__NAMESPACE__:命名空间
2
3
4
5
6
7
8
<?php
namespace MyProject;// 必须是在首行
// 魔术常量
echo '这是第 " ' . __LINE__ . ' " 行','<br>';
echo '该文件位于 " ' . __FILE__ . ' " ','<br>';
echo '该文件位于 " ' . __DIR__ . ' " ','<br>';
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
class test {
function _print() {
echo '类名为:' . __CLASS__ . "<br>";
echo '函数名为:' . __FUNCTION__ ."<br>";
echo '类的方法名:' . __METHOD__ ;
}
}
$t = new test();
$t->_print();
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
输出
这是第 " 4 " 行
该文件位于 " /Library/WebServer/Documents/a.php "
该文件位于 " /Library/WebServer/Documents "
命名空间为:"MyProject"类名为:MyProject\test
函数名为:_print
类的方法名:MyProject\test::_print
2
3
4
5
6
注:PHP中的命名空间,可以解决的问题:
- 用户编写的代码与PHP内部的类/函数/常量名字冲突
- 为很长的标识符创建一个更加可读的别名
# 数组
# 数组定义
- 自动分配id
$cars = array("Volvo","BMW","Toyota");
$a = array( 'a',3 => 'b',1 => 'c', 'd');
var_dump($a)
// 输出
//array(4) { [0]=> string(1) "a" [3]=> string(1) "b" [1]=> string(1) "c" [4]=> string(1) "d" }
2
3
4
5
- 关联数组
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
- 遍历数组
<?php
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach ($age as $key => $value) {
echo $key,' => ',$value,' type: ',var_dump($key),'<br>';
}
?>
2
3
4
5
6
- 数组排序
sort() <--> rsort() asort() <--> arsort() //关联数组 ksort() <--> krsort() //关联数组
<?php
$age=array("a"=>"5","c"=>"37","b"=>"-1","e"=>"1");
echo "原始数组:";
print_r($age);
echo "<br>";
echo "按key 排序";
ksort($age);
print_r($age);
echo "<br>";
echo "按value 排序";
asort($age);
print_r($age);
echo "<br>";
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# PHP 面向对象
<?php
class Site {
/* 成员变量 */
var $url;
var $title;
function __construct($par1,$par2){
$this->url = $par1;
$this->title = $par2;
}
function __destruct(){
echo __FUNCTION__." 已经运行";
}
/* 成员函数 */
function setUrl($par){
$this->url = $par;
}
function getUrl(){
echo $this->url . PHP_EOL;
}
function setTitle($par){
$this->title = $par;
}
function getTitle(){
echo $this->title . PHP_EOL;
}
}
$siteobj = new Site('www.baidu.com','baidu');
print $siteobj->url;
$siteobj->setUrl('ppsteven.github.io');
$siteobj->setTitle('learnPHP');
$siteobj->getUrl();
$siteobj->getTitle();
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 函数作用域
<?php
$y = "globals varibale"; //全局变量
function myTest($z=null)
{
global $y; // $y 为全局变量,有两种方式使用
echo $y,'<br>';
echo $GLOBALS['y'],'<br>';
echo '参数作用域',$z;
static $x1=0;
$x2 = 0; // 局部变量
echo $x1.'('.$x2.")";// 静态变量是不会随着函数完成而删除
$x1++;
$x2++;
}
myTest();
myTest();
myTest();
/*
x2(x1)
0(0)
0(1)
0(2)
*/
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 其他
包含一些小的知识点和未系统整理的知识
三元:expr1 ? expr2 : expr3
<?php $var = true ? 1 : false ? 2 : 3; $varx = (true ? 1 : false)? 2 : 3; $vary = true ? 1 : (false ? 2 : 3); echo $var.'<br>'; echo $varx.'<br>'; echo $vary.'<br>'; // 结果是 2 2 1 , 这里的三元运算需要注意执行的顺序
1
2
3
4
5
6
7
8null == false : 返回的是false
1/2 (0.5) PHP中没有整除算法,有整除函数intdiv(1/2)
php 作用域
- local
- global
- static
- parameter // 参数作用域
<?php function myTest() { static $x=0; echo $x; $x++; echo PHP_EOL; // 换行符 } // 这里的 static 使得$x 的值会一直累加 myTest(); // 0 myTest(); // 1 myTest(); // 2 ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14echo PHP_EOL; // 换行符
== 弱比较 === 强比较