跳到主要内容

PHP学习笔记

php 入门教程,主要来自于菜鸟教程,入门级别,日常学习笔记。 找了一个 php 的实习,必须马上掌握啊。

示例

<!DOCTYPE html>
<html>
<body>

<h1>My first PHP page</h1>

<?php
echo "Hello World!";
?>

</body>
</html>

注释

<?php
// php 代码
?>

// 单行注释
/**/ 多行注释

echo/print

echo // 多个 print // 一个

<?php 
//两行是相同效果,<br> 看做回车
echo "Hello world! from:","Elen","<br>";
print "Hello world! from:"."Elen".'<br>';
?>

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;

output:

"hername : " Sally "123"
  1. 结束需要独立一行且前后不能空格
  2. $name 经过了计算
  3. 空格和换行都被处理为一个空格

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);

?>

结果如下

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

常量

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
$name:常量名
$value:值
$case_insensitive:是否对大小写敏感,true 代表不敏感

define("GREETING", "欢迎访问 Runoob.com"); echo GREETING; // 输出 "欢迎访问 常量默认是全局变量

字符串相关

//字符串合并
$txt ."+".$txt2
//字符串长度
strlen()
//字符串查找,未找到返回False
strpos("文本","查找字符") // 返回字符串位置,从0开始

条件语句

<?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 "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>

循环

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--)
?>

输出:

while
5
4
3
2
1
do..while
5
4
3
2
1
0

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>";
}
?>

输出

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

魔术常量

__LINE__: 语句所处的行号
__FILE__: 文件的完整路径(含文件名)
__DIR__: 文件的目录
__FUNCTION__: 函数名
__CLASS__: 类名
__TRAIT__: Trait 名
__METHOD__:类的方法名
__NAMESPACE__:命名空间
<?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();

?>

输出

这是第 " 4 " 行
该文件位于 " /Library/WebServer/Documents/a.php "
该文件位于 " /Library/WebServer/Documents "
命名空间为:"MyProject"类名为:MyProject\test
函数名为:_print
类的方法名:MyProject\test::_print

注:PHP中的命名空间,可以解决的问题:

  1. 用户编写的代码与PHP内部的类/函数/常量名字冲突
  2. 为很长的标识符创建一个更加可读的别名

数组

数组定义

  1. 自动分配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" }
  1. 关联数组
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  1. 遍历数组
<?php
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach ($age as $key => $value) {
echo $key,' => ',$value,' type: ',var_dump($key),'<br>';
}
?>
  1. 数组排序

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>";

?>

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();
?>

函数作用域

<?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)
*/
?>

其他

包含一些小的知识点和未系统整理的知识

  • 三元: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 , 这里的三元运算需要注意执行的顺序
  • null == 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
    ?>
  • echo PHP_EOL; // 换行符

  • == 弱比较 === 强比较