PHP之新手自学基础知识(一)——开始篇

1.认识PHP标签

PHP 脚本以 <?php 开始,以 ?> 结束

   <?php 
    echo "欢迎学习PHP!";
    echo "Welcome" ." to learn PHP!";
    echo 1+2+3+4+5;
    ?>

注意:;号不能少而.英文点字符串拼接,echo关键字与字符串之间至少要有一个空格,echo是PHP中的输出语句类似Java的println

2.创建(声明)PHP变量,PHP 是一门弱类型语言

<?php 
$z="Hello world!";
$x=5;
$y=10.5;
echo z;
echo x+y;
?>

● 变量以 $ 符号开始,后面跟着变量的名称
● 变量名必须以字母或者下划线字符开始
● 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
● 变量名不能包含空格
● 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。

3.PHP 变量作用域

变量的作用域是脚本中变量可被引用/使用的部分。
PHP 有四种不同的变量作用域:
● local //局部
● global //全局,调用全局所需关键字
● static //让局部变量不随函数调用完而销毁的关键字
● parameter //参数变量

局部和全局作用域

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:

<?php 
$x=1; // 全局变量 
function test() 
{ 
    $y=2; // 局部变量 
    echo "<p>测试函数内接收的变量:<p>"; 
    echo "变量x为: $x"; //输出为空,要想输出为1需呀用到global 关键字
    echo "<br>"; 
    echo "变量y为: $y"; //输出为2
}  
test(); 
echo "<p>测试函数外接收的变量:<p>"; 
echo "变量 x 为: $x"; //输出为1
echo "<br>"; 
echo "变量 y 为: $y"; //输出为空,无法调用局部变量
?>
PHP global 关键字

global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:

<?php
$x=1;
$y=1;
 function test()
{
    global $x,$y;
    $y=$x+$y;
}
test();
echo $y; // 输出 2
?>

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
上面的实例可以写成这样:

<?php
$x=1;
$y=1;
function test()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 
test();
echo $y; // 输出 2
?>
Static 作用域

当一个函数被调用完后,函数内的所有变量通常都会被删除。然而,有时候希望某个局部变量不要被删除。
那么在第一次声明的局部变量时使用 static 关键字如下:

<?php
function test()
{
    static $x=0;
    echo $x;
    $x++;
    echo "<br />";
}
test();
test();
test();//竖着输出0 1 2,若不做叠加每次都会输出0
?>
参数(parameter)作用域

参数是通过调用代码将值传递给函数的局部变量。
参数是在参数列表中声明的,作为函数声明的一部分:

<?php
function test($x)
{
    echo $x;
}
test(1);
?>

4.PHP echo 和 print 语句

在 PHP 中有两个基本的输出方式: echo 和 print。
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。
echo 和 print 区别:
● echo – 可以输出一个或多个字符串
● print – 只允许输出一个字符串,返回值总为 1
提示:echo属于语句语法,print可以看做函数,所以echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
例子:

<?php
echo "Hello world!<br>";
print "Hello world!<br>";
echo "这是一个", "字符串,", "使用了", "多个", "参数。" ,"<br>";
echo("这是一个"."字符串,"."使用了". "多个". "参数。"."<br>");
//print "这是一个", "字符串,", "使用了", "多个", "参数。";//解开后会报错
print("只能输入一个字符串");
echo "<br>";
$txt1="学习 PHP";
$txt2="自主";
$cars=array("兰博基尼","玛莎拉蒂","宝马");

echo $txt1;
echo "<br>";
echo "$txt2 学习 PHP <br>";
echo "我想要一台 {$cars[0]}跑车";

print "<br>";
print "<br>";
print  $txt1 ;
print "<br>";
print "在 $txt2 学习 PHP ";
print "<br>";
print "我想要一台 {$cars[1]}跑车";
?>

5.PHP 数据类型

String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。

PHP 字符串(String)

可以将任何文本放在单引号和双引号中:

<?php  $x = "Hello World!"; echo  $x; echo  "<br>"; $x = 'Hello World!'; echo  $x; ?>
PHP 整型

整数是一个没有小数的数字。
整数规则:

  • 整数必须至少有一个数字 (0-9)
  • 整数不能包含逗号或空格
  • 整数是没有小数点的
  • 整数可以是正数或负数
  • 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。

在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:

<?php 
$x = 12580;
var_dump($x);
echo "<br>"; 

$x = -123; // 负数 
var_dump($x);
echo "<br>"; 

$x = 0x8C; // 十六进制数
var_dump($x);
echo "<br>";

$x = 056; // 八进制数
var_dump($x);
?>
PHP 浮点型

浮点数是带小数部分的数字,或是指数形式。
在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:

<?php 
$x = 10.24;
var_dump($x);
echo "<br>"; 

$x = 2.4e3;
var_dump($x);
echo "<br>"; 

$x = 8E-5;
var_dump($x);
?>
PHP 布尔型

布尔型可以是 TRUE 或 FALSE。

<?php 
$x=true;
var_dump($x);

$y=false;
var_dump($y);
?>
PHP 数组(后面会有更详细的介绍)

数组可以在一个变量中存储多个值。

<?php 
$cars=array("兰博基尼","玛莎拉蒂","宝马");
var_dump($cars);
?>
PHP 对象

对象数据类型也可以用于存储数据。
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:

<?php
class Car //创建一个汽车类
{

var $color;

function Car($color) {

$this->color = $color;

}

function what_color() {
       return $this->color;
    }

}

function print_vars($obj) {
   foreach (get_object_vars($obj) as $prop => $val) {//将对象转换成对象值输出
    echo "\t$prop = $val\n";
   }

}

// instantiate one object(实例化一个对象)
$myCar= new Car("white");
// show herbie properties(显示herbie对象的属性)
echo "我车子的颜色属性:";
print_vars($myCar);
?>
PHP NULL 值

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据:

<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>

6.PHP 常量

常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用。

设置 PHP 常量

设置常量,使用 define() 函数,函数语法如下:
define ( 常量名, 常量值, 布尔类型值(可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。))

<?php
// 区分大小写的常量名
define("SHOW", "欢迎学习PHP");
echo SHOW; // 输出 "欢迎学习PHP"
echo '<br>';
//echo show; // 解开后输出 "show"报错
?>
<?php
// 不区分大小写的常量名
define("SHOW", "欢迎学习PHP",true);
echo show; // 输出 "欢迎学习PHP"
?>
常量是全局的

常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
以下实例演示了在函数内使用常量,即便常量定义在函数外也可以正常使用常量。

<?php  
define("SHOW", "欢迎学习PHP"); 
function  test()  {  echo  SHOW; }  test(); // 输出 "欢迎学习PHP" 
 ?>

7.PHP 字符串

PHP 并置运算符(字符串拼接符合)
在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来,刚开始有提及到下面再复习下:

<?php

echo "Welcome" ." to learn PHP!";

$txt1="Hello world!";

$txt2="What a nice day!";

echo $txt1 . $txt2;

?>
PHP strlen() 函数

strlen() 函数返回字符串的长度(字符数)。

<?php echo strlen("Hello world!"); //输出12 ?>

提示:strlen() 常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)

PHP strpos() 函数

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

<?php 
 //在"Hello world!"中查找文本"world"
echo strpos("Hello world!","world"); //输出:6
?>

提示:在上面的实例中,字符串 “world” 的位置是 6。之所以是 6 而不是 7 的原因是,字符串中第一个字符的位置是 0,而不是 1。

完整的 PHP String 参考手册(知识拓展)

如需查看所有字符串函数的完整参考手册,请访问菜鸟教程的 PHP String 参考手册
拓展:

<?php echo strlen("中文字符");  // 输出 12,因为一个中文占3个字符  ?>
<?php
//可以使用 mb_strlen 设置指定编码输出中文字符个数
 echo mb_strlen("中文字符",'utf-8');  // 输出 4 
 ?>

8.PHP 数据类型的转换

PHP是弱类型语言,因为在我们申明一个变量的时候,并不需要指明它保存的数据类型,但是PHP虽然是弱语言,但有时候仍然需要用到类型转换。

PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:

  • (int)、(integer):转换成整形
  • (float)、(double)、(real):转换成浮点型
  • (string):转换成字符串
  • (bool)、(boolean):转换成布尔类型
  • (array):转换成数组
  • (object):转换成对象

PHP数据类型有三种转换方式:

  • 在要转换的变量之前加上用括号括起来的目标类型(强制转换)
  • 使用3个具体类型的转换函数,intval()、floatval()、strval()
  • 使用通用类型转换函数settype(mixed var,string type),

成功时返回 TRUE, 或者在失败 时返回 FALSE。

第一种转换方式: (int) (bool) (float) (string) (array) (object)

<?php

$num1=3.14;

$num2=(int)$num1;

$num3=(array)$num1;

$num4=(bool)$num1;

$num5=(string)$num1;

$num6=(object)$num1;

var_dump($num1); //输出float(3.14)

echo '<br>';

var_dump($num2); //输出int(3)

echo '<br>';

var_dump($num3);//输出array (size=1) 0 => float 3.14

echo '<br>';

var_dump($num4);//输出boolean true

echo '<br>';

var_dump($num5);//输出string '3.14' (length=4)

echo '<br>';

var_dump($num6);//输出object(stdClass)[2] public 'scalar' => float 3.14

echo '<br>';

?>

第二种转换方式: intval() floatval() strval()

<?php   

$str="123.9abc";   

$int=intval($str);     //转换后数值:123   

$float=floatval($str); //转换后数值:123.9   

$str=strval($float);   //转换后字符串:"123.9"    

?>  

第三种转换方式: settype();

<?php   

$num4=12.8;   

$flg=settype($num4,"int");   

var_dump($flg);  //输出bool(true)   

var_dump($num4); //输出int(12)   

?> 
PHP变量的数据类型自动转换

PHP会自动把变量转换为自动的数据类型

<?php

$string = "就是就是";

var_dump($string); //输出string(就是就是)

$string = 9494;

var_dump($string); //输出int(9494)

echo "<br />";

?>

8.PHP 运算符

PHP 算术运算符

加(+)、减(-)、乘(*)、除(/)、取余(%)

<?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;//输出-6  
?>
PHP7+ 版本新增整除运算符 intdiv(),使用实例:
<?php  var_dump(intdiv(10, 3));//输出int(3) ?>
PHP 赋值运算符

左操作数被设置为右侧表达式的值
=、+=、-=、*=、/=、%=、 .=(除=号外,其他符号都是自身加、减、乘、除、取余、拼接另一个数再赋值给自身的变量)

<?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="Hello"; 
$x .= " world!"; 
echo  $x; // 输出Hello world! 
?>

PHP 递增/递减运算符

运算符名称描述
++ x预递增x 加 1,然后返回 x
x ++后递增返回 x,然后 x 加 1
— x预递减x 减 1,然后返回 x
x —后递减返回 x,然后 x 减 1
<?php  
$x=10; echo ++$x; // 输出11  
$y=10; echo  $y++; // 输出10  
$z=5; echo --$z; // 输出4 
 $i=5; echo  $i--; // 输出5  ?>
PHP 比较运算符
运算符名称描述实例
x == y等于如果 x 等于 y,则返回 true5==8 返回 false
x === y绝对等于如果 x 等于 y,且它们类型相同,则返回 true5===”5″ 返回 false
x != y不等于如果 x 不等于 y,则返回 true5!=8 返回 true
x <> y不等于如果 x 不等于 y,则返回 true5<>8 返回 true
x !== y绝对不等于如果 x 不等于 y,或它们类型不相同,则返回 true5!==”5″ 返回 true
x > y大于如果 x 大于 y,则返回 true5>8 返回 false
x < y小于如果 x 小于 y,则返回 true5<8 返回 true
x >= y大于等于如果 x 大于或者等于 y,则返回 true5>=8 返回 false
x <= y小于等于如果 x 小于或者等于 y,则返回 true5<=8 返回 true
<?php  
$x=100; 
$y="100"; 
var_dump($x == $y); 
echo  "<br>"; 
var_dump($x === $y); 
echo  "<br>"; 
var_dump($x != $y); 
echo  "<br>"; 
var_dump($x !== $y); 
echo  "<br>"; 
$a=50; $b=90; 
var_dump($a > $b); 
echo  "<br>"; 
var_dump($a < $b);
 ?>
PHP 逻辑运算符
运算符名称描述实例
x and y如果 x 和 y 都为 true,则返回 truex=6,y=3 (x < 10 and y > 1) 返回 true
x or y如果 x 和 y 至少有一个为 true,则返回 truex=6,y=3 (x==6 or y==5) 返回 true
x xor y异或如果 x 和 y 有且仅有一个为 true,则返回 truex=6,y=3 (x==6 xor y==3) 返回 false
x && y如果 x 和 y 都为 true,则返回 truex=6,y=3(x < 10 && y > 1) 返回 true
x ‖ y()如果 x 和 y 至少有一个为 true,则返回 truex=6,y=3(x==5 ‖ y==5) 返回 false
! x如果 x 不为 true,则返回 truex=6,y=3
!(x==y) 返回 true
三元运算符

语法格式

(expr1)  ?  (expr2)  :  (expr3)

对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。

<?php  
$test = '菜鸟教程';
 // 普通写法  
$username = isset($test) ? $test : 'nobody'; 
echo  $username, PHP_EOL; 
// PHP 5.3+ 版本写法 
 $username = $test ?: 'nobody';
 echo  $username, PHP_EOL; 
?>

注意:PHP_EOL 是一个换行符,兼容更大平台。

在 PHP7+ 版本多了一个 NULL 合并运算符 ??,实例如下:

<?php  
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值  $username = $_GET['user'] ?? 'nobody';
 // 类似的三元运算符  
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
 ?>
组合比较符(PHP7+)

太空船操作符,即 <=>,又称组合比较运算符,结合比较运算符。
语法是这样的:$c = $a <=> $b;
这句代码的意思是

  • 如果$a > $b, $c 的值为1
  • 如果$a == $b, $c 的值为0
  • 如果$a < $b, $c 的值为-1
<?php 
 // 整型  
echo  1 <=> 1; // 0  
echo  1 <=> 2; // -1  
echo  2 <=> 1; // 1 
 // 浮点型 
 echo  1.5 <=> 1.5; // 0  
echo  1.5 <=> 2.5; // -1  
echo  2.5 <=> 1.5; // 1  
// 字符串  
echo  "a" <=> "a"; // 0  
echo  "a" <=> "b"; // -1  
echo  "b" <=> "a"; // 1  
?>

拓展:在没有太空船运算符的时候,我们只能这样写代码:

$c = $a > $b ? 1 : ( $a==$b ? 0 : -1 );
运算符优先级

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18。

如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,”-“是左联的,那么 1 – 2 – 3 就等同于 (1 – 2) – 3 并且结果是 -4. 另外一方面,”=”是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。

没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1是合法的, 因为 == 的优先级低于 <=。

结合方向运算符附加信息
clone newclone 和 new
[array()
++ — ~ (int) (float) (string) (array) (object) (bool) @类型和递增/递减
instanceof类型
!逻辑运算符
* / %算术运算符
+ – .算术运算符和字符串运算符
<< >>位运算符
== != === !== <>比较运算符
&位运算符和引用
^位运算符
位运算符
&&逻辑运算符
逻辑运算符
? :三元运算符
= += -= *= /= .= %= &= 丨= ^= <<= >>= =>赋值运算符
and逻辑运算符
xor逻辑运算符
or逻辑运算符
,多处用到

运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。

<?php 
 // 优先级: && > = > and  
// 优先级: || > = > or  
$a = 3; 
$b = false; 
$c = $a  or  $b; 
var_dump($c); // 这里的 $c 为 int 值3,而不是 boolean 值 true  
$d = $a || $b; 
var_dump($d); //这里的 $d 就是 boolean 值 true 
?>

括号的使用

上面已提过使用括号来强制改变优先级,我们通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

<?php  
// 括号优先运算  
$a = 1; $b = 2; $c = 3; $d = $a + $b * $c; 
echo  $d; //输出为7  echo  "\n"; $e = ($a + $b) * $c; // 使用括号输出为9  
echo  $e; 
echo  "\n"; 
?>

声明:自学PHP大部分参考http://www.runoob.com/php/php-tutorial.html写出,以后发表的PHP基础知识文章也将会继续参考上方网址而写!但还是有点区别的基础部分重要的我会详细写出,希望大家喜欢我写的文章。

    原文作者:天谴残魂
    原文地址: https://www.jianshu.com/p/ffa6fd9e642d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞