PHP基础

日期: 2019-12-06 15:30 浏览次数 :

每种语言都有自己的独到之处,或奇特的语法,或不常见的函数,或非标准的执行方式。因此,不论新丁还是老手,看着某个特性会突然醉了。文中总结了10个经常被提及的“奇异”特性。

一、PHP简介

  • PHP超文本预处理器。是嵌入HTML文件中的服务器端脚本程序。换句话:PHP只能运行在服务器上。
  • 一个HTML文件中,可以包含的代码:HTML代码、CSS代码、JS代码、PHP代码等。

PHP的主要功能:web应用开发(线上产品)。

  • PHP入门比较简单,语法与C、Java、C#、JS等相似。
  • PHP主要用函数做各种操作,而JS主要用内置对象作操作。

Hello World##

<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?phpecho "Hello World!";?>
</body>
</html>

在线运行
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。

1. Javascript: + 是一个连接符

二、PHP语言基础

  • PHP代码,跟ASP一样,都是嵌入到HTML文件中去的。
  • PHP代码标记:<?php …… ?>
  • PHP文件的扩展名:.php
  • PHP文件的执行,必须从域名开始访问(必须要经过虚拟主机)。
  • 访问PHP文件的路径上,不能包含空格和中文。
  • PHP也是区分大小写,但关键字和函数名不区分大小写。
  • PHP中每条语句,必须以英文下的分号结束(;)。

图片 1

技术分享

变量##

<?php
$x=22;
$y=33;
$z=$x+$y;
echo $z;

在线运行
PHP 变量规则:

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

当赋一个文本值给变量时,在文本值两侧加上引号.

<?php
$z="Hello world!";
echo $z;

在线运行
不必向 PHP 声明该变量的数据类型。
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。PHP是一门弱类型语言.

PHP 有四种不同的变量作用域:

  • local
  • global
  • static
  • parameter
    在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
    在 PHP 函数内部声明的变量是*局部变量*,仅能在函数内部访问:
<?php
$x=5; // 全局变量
function myTest(){
    $y=10; // 局部变量
    echo "测试函数内变量:";
   // print_r($x);这个$x是打印不出来的,如果想要打印出来,需要使用global.
    print_r($y);
}
myTest();
echo "测试函数外变量:";
print_r($x);
//print_r($y);

在线运行
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。index保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量

<?php
$x=55;
$y=10;
function myTest(){ 
   $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;

在线运行
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用static关键字:

<?php
function myTest(){
    static $x=0;
    echo $x;
    $x++;
}
myTest();
myTest();
myTest();
myTest();

在线运行

问题描述:

三、PHP注释

  • HTML注释:<!—注释内容 -->
  • CSS注释:/* */
  • JS注释://或/* */

注意的功能:是为以后修改项目时,找问题非常方便。

  • PHP基础。PHP的单行注释://或#
  • PHP的多行注释:/* */

提示:多行注释不能相互嵌套。
注意:PHP的注释,与代码一样,最终在客户端都是不可见。

图片 2

技术分享

PHP echo 和 print 语句##

echo 和 print区别:
echo - 可以输出一个或多个字符串
print - 只允许输出一个字符串,返回值总为 1

提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

<?php
echo "<h2>PHP is fun 1!</h2>";
echo "Hello world!<br>";
echo "I'm about to learn PHP!<br>";
echo "This", " string", " was", " made", " with multiple parameters.";
echo "<br>";
echo '*******************************';
print "<h2>PHP is fun 2!</h2>";
print "Hello world!<br>";
print "I'm about to learn PHP!";
//print "This", " string", " was", " made", " with multiple parameters.";  会出错

在线运行

<?php
$txt1="Learn   PHP";
$txt2="w3cschool.cc";
$cars=array("Volvo","BMW","Toyota");
print $txt1;
print "<br>";
print "Study PHP at $txt2";
print "My car is a {$cars[0]}";

在线运行

在JS中,+ 号用在数字间,可以用作常规加法;但如果遇上字符,又可作为字符连接符。例如:'1'+ 1的结果是11。

四、PHP变量

1、变量的概念
变量是临时存储数据的容器。

2、变量的命名规则

  • 变量名可以包含:a-z、A-Z、0-9、_(下划线)。
  • 变量名不能以数字开头。
  • 变量名可以以字母或下划线开头。
  • PHP的变量前,必须以“$”符号开头,但不是变量名的一部分。如:$name、$age
  • 对长文件名,如何命名呢?
“驼峰式命名”:$getUserName、$getUserPassword
“下划线式命名”:$get_user_name、$get_user_pwd

3、写程序的一般思路

  • 变量初始化。
  • 项目运行的过程。
  • 输出结果。

图片 3

技术分享

4、变量赋值
使用“=”将右边的运算结果,赋给左边的变量名。换句话说:将“=”右边的数据,装到左边容器中。

$name = “abc”;
$name = 100 + 200;

$name+10 = 100; (//错误的写法)

PHP变量的数据类型
提示:变量本身没有类型之分,变量的数据才有类型之分。

JS 中变量的数据类型:

基本数据类型(只有一个值):字符型、数值型、布尔型、NULL、undefined
复合数据类型(可能有多个值):数组、对象、函数。

PHP 中变量的数据类型:

标量数据类型:字符串型、整型、浮点型、布尔型
复合数据类型:数组、对象
特殊数据类型:资源、NULL

1. 整型
整型的取值范围:-21亿~21亿

图片 4

技术分享

2. 浮点型(小数:有限小数、无限小数)
浮点型取值范围:-1.7E-308~1.7E+308
举例:9E3 => 9*10^3 = 9000

图片 5

技术分享

图片 6

技术分享

3. 字符串型
字符串的表示方法有三种:
(1)用单引号

单引号内的转义字符,只能是:\、’
<?php //用单引号表示字符串 $str =‘自挂‘东南\枝‘; echo $str;?>

图片 7

技术分享

(2)用双引号
双引号内,所有的转义字符都能使用。如:、’、”、$、n、r、t

(3)长字符串的表示方法

  • 长字符串表示,必须放在“<<<heredoc”和 “heredoc;”之间。
  • “<<<heredoc”必须是开头的标记。
  • “heredoc;”必须是结束的标记。必须是单独一行,并且顶头写。
  • heredoc可以自定义名称。
  • 可以直接解析PHP变量。
//长字符串的表示方法
$name = "林长生";
$edu="北京理工大学";
$str = <<<heredoc
<p onMouseOver="pOver(this)" onMouseOut="pOut(this)">
1.tornado
2.Python 和Ruby,scala
3.semantic UI 和 Element UI
4.app hybrid开发
5.backbone
6.Grunt,Gulp
7.Ember.js ,chart.js,undescore.js
8.typescript
9.RESTful service
浏览器兼容问题 
解决人: {$name} 来自: {$edu}
</p>
<script type="text/javascript">
  function pOver(pObj){ 
    pObj.style.backgroundColor="skyblue";
  }
  function pOut(pObj){ 
    pObj.style.backgroundColor="";
  }
</script>
heredoc;
echo $str;

图片 8

技术分享

(4)字符串的注意事项

  • 在双引号内,输出是变量的值。如:echo “{$name}的年龄是24岁”
  • 在单引号内,输出的是变量的名称,而不是值。
  • 在双引号内,如果一个变量名后跟一个非空字符,则会让编译器糊涂。这种情况解决方案是:后面可以跟一个空格字符,也可以跟英文下的标点符号,这些都会解析变量的。

图片 9

技术分享

可以使用大括号,将变量包起来,也能解析变量的。

图片 10

技术分享

4. 布尔型
$a = true;
$b = false;
布尔值,常用在条件判断中。如:if、while、for等。

5. 资源类型
资源类型:是指PHP对外部数据的一个引用。如:数据库、文件操作、图片验证码等。

<?php 
  //PHP链接MySQL数据库(旧的,将要移除) 
  // $link = mysql_connect("localhost","root",""); 
  // echo $link;

header("content-type:text/html;charset=utf-8");
$servername = "localhost";
$username="root";
$password="";
$conn=new mysqli($servername,$username,$password);
if($conn->connect_error){ 
    die("数据库连接失败:".$conn->connect_error);
} else { 
    echo "数据库连接成功";};
?>

6. NULL
空型:当使用一个不存在的变量时,返回空型。空型一般认为变量不存在。
空型只有一个值,就是NULL,不区分大小写。

PHP变量的类型判断
1. var_dump()

描述:打印变量的相关信息(包括变量的类型和值)
语法:void var_dump ( mixed $expression [, mixed $... ] )
参数:$expression是指要打印变量的名称,可以是多个变量,多个变量之间用逗号隔开。
返回值:无。

*2. is_()

is_bool():判断变量是不是布尔型。
is_int():判断变量是不是整型。
is_float():判断变量是不是浮点型。
is_numeric():判断变量是不是数值型。
is_string():判断变量是不是字符串。
is_array():判断变量是不是数组
is_object():判断变量是不是对象
is_null():判断变量是不是空型。
is_resource():判断变量是不是资源型。

3. isset()

描述:检测变量是否设置。
语法:bool isset ( mixed $var [, mixed $... ] )
返回值:如果变量存在,且不等于NULL,则返回TRUE。否则,返加FALSE。

<?php
  //form表单提交 
  // if(isset($_GET)){ 
  // //打印全局数组的信息 
  // var_dump($_GET); 
  // } 
  if(isset($_POST["username"])){ 
    //获取表单元素的值 
    $username = $_POST["username"]; 
    echo "用户名:{$username}"; 
  } 
?>

<form name="formal" method="get" action=""> 
  用户名:<input type="text" name="username"> 
  密码: <input type="password" name="userpwd"> 
  <input type="submit" value="提交表单">
</form>

4. empty()

描述:检查一个变量是否为空
语法:bool empty ( mixed $var )
说明:换句话说,""、0、"0"、NULL、FALSE、array()、var $var;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

图片 11

技术分享

PHP如何获取表单提交数据
1. 超全局数组变量:$_GET[]

描述:获取表单 method = “get” 提交的数据
举例:$username = $_GET[“username”];

<?php
  //form表单提交 
  // if(isset($_GET)){ 
  // //打印全局数组的信息 
  // var_dump($_GET); 
  // } 
  if(isset($_POST["username"])){ 
    //获取表单元素的值 
    $username = $_POST["username"]; 
    echo "用户名:{$username}"; 
  } 
?>

<form name="formal" method="get" action=""> 
    用户名:<input type="text" name="username"> 
    密码: <input type="password" name="userpwd"> 
    <input type="submit" value="提交表单">
</form>

2. 超全局数组:$_POST[]

描述:获取表单 method = “post” 提交的数据
举例:$username = $_POST[“username”];

变量之间的运算,必须是同类型的。如果类型不同,则必须转成同类型,然后再运算。
变量类型的转换:系统自动转换、强制转换(手动转换)

PHP数据类型转换
1. 其它类型转成布尔型

图片 12

技术分享

2. 其它类型转成数值型

图片 13

技术分享

3. 其它类型转成字符型(了解)

图片 14

技术分享

PHP运算符
1. 算术运算符:+、-、*、/、%、++、--

  1. “%”取余。两个数相除取余数。如果余数为0,说明能除尽。
    举例:10 % 3 = 1 //余数为1,说明10不能被3整数

  2. “++”自加1。有两种用法:作前缀(++$i)和作后缀($i++)。
    (1) 如果单独使用,$i++和++$i,结果一样。

    (2) 如果将$i++和++$i,混在其它表达式当中,则结果不一样。
    $c = $a+++10; //等于$c = ($a++)+10

2. 字符串运算符:.或.=

图片 15

技术分享

3. 赋值运算符:=、+=、-=、*=、/=、%=

   “=”赋值号。将右边运算结果,赋给左边变量。
   “+=”先加后等。$a += 10  //展开后  $a = $a+10
   “-=”先减后等。$a -= 10   //展开后  $a = $a – 10
   “*=”先乘后等。$a *= 10  //展开后  $a = $a * 10

4. 比较运算符:>、<、>=、<=、==、!=、===、!==

注意:比较运算符的运算结果,就是一个布尔值。
“=”赋值号。
“==”是等于。判断值是否相等,不管类型。如: 10 == “10px” //true
“===”全等于。判断类型是否一致,还要判断值是否相等。10 === “10px” // false

5. 逻辑运算符:&&、||、!

“&&”逻辑与(并且关系)。如果左右两个操作数的结果都为TRUE,则总结果为TRUE。只要有一个为FALSE,则总结果为FALSE。

“!”逻辑非(取反)。

!TRUE = false
!100 = false

三元运算符

二元运算符:是左右有两个操作数。如:+、-、*、/
三元运算符:是三个操作数或者表达式。

运算符优先级

图片 16

技术分享

PHP相关
原文:http://www.cnblogs.com/mrszhou/p/7260968.html

php数据类型##

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

设置常量,使用 define() 函数,函数语法如下

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

成因分析:

创建一个区分大小写的常量##

常量在定义后,默认是全局变量

<?php
echo "区分大小写<br>";
define("GREETING", "欢迎访问 baidu.com");
echo GREETING;    // 输出 "欢迎访问 baidu.com"
echo '<br>';echo "greeting";   // 输出 "greeting"
echo "<br>不区分大小写<br>";
define("GREETING", "欢迎访问 baidu.com", true);
echo greeting;  // 输出 "欢迎访问 baidu.com"

在线运行

根本性原因是JS属于弱类型语言。比方说Python,同样地使用+ 号作为字符连接符,但由于它是强类型语言,一旦发现一个字符与一个整数进行相加,它会提示这是个错误操作。

PHP 并置运算符##

在 PHP 中,只有一个字符串运算符。
并置运算符** (.) **用于把两个字符串值连接起来。

<?php
$txt1="Hello world!";
$txt2="Today a nice day!";
echo $txt1 . " " . $txt2;

在线运行

网友们的看法:

PHP strlen() 函数##

有时知道字符串值的长度是很有用的。
strlen() 函数返回字符串的长度(字符数)。

<?php
echostrlen("Helloworld!");
?>

在线运行

“问题在于这是个无法预料的强制性静默转换,很容易就忽略了。”匿名

PHP strpos() 函数##

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

<?php
echostrpos("Helloworld!","world");
?>

在线运行

“JS应该就该情况作异常抛出处理。” crgwbr

PHP运算符##

在 PHP 中,赋值运算符 = 用于给变量赋值。
在 PHP 中,算术运算符 + 用于把值加在一起。

<?php
$x=10;
$y=6;
echo "<br> +  ";
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

在线运行

“用+来进行字符连接简直是个噩梦。” Matteo Riva

PHP7+ 版本新增整除运算符intdiv(),##

<?php
var_dump(intdiv(10, 3));
?>

在线运行

PHP 逻辑运算符

运算符 名称 描述 实例
x and y 如果 x 和 y 都为 true,则返回 true x=6y=3(x < 10 and y > 1返回 true
x or y 如果 x 和 y 至少有一个为 true,则返回 true x=6y=3(x==6 or y==5) 返回 true
x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true x=6y=3(x==6 xor y==3) 返回 false
x && y 如果 x 和 y 都为 true,则返回 true x=6y=3(x < 10 && y > 1) 返回 true
x II y 如果 x 和 y 至少有一个为 true,则返回 true x=6y=3(x==5 II y==5) 返回 false
! x 如果 x 不为 true,则返回 true x=6y=3!(x==y) 返回 true

2. Perl:模块必须返回TRUE值

PHP 数组运算符##

运算符 名称 描述
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($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);

在线运行

问题描述:

三元运算符##

另一个条件运算符是"?:"(或三元)运算符 。

(expr1) ? (expr2) : (expr3) 

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

<?php
$test = 'Today is a nice day!';
//$test = '';
// 普通写法
$username = isset($test) ? $test : 'nobody1';
echo $username, PHP_EOL;
//PHP_EOL 换行
// PHP 5.3+ 版本写法
$username = $test ?: 'nobody2';
echo $username, PHP_EOL;

在线运行
在 PHP7+ 版本多了一个 NULL 合并运算符,

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

绝大多数情况下,Perl模块在结束时候,都必须以1;语句来结尾,否则,如果最后一条语句的返回值不是TRUE,系统就会报错了。

if else##

  • if 语句 - 在条件成立时执行代码
  • if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
  • if...else if....else 语句 - 在若干条件之一成立时执行一个代码块
  • switch 语句 - 在若干条件之一成立时执行一个代码块

成因分析:

switch##

<?php

/**
 * Created by Zoe.
 * User: Administrator
 * Date: 2017/1/23
 * Time: 9:10
 */
$favcolor="red";
switch ($favcolor)
{
    case "red":
        echo "你喜欢的颜色是红色!";
        break;
    case "blue":
        echo "你喜欢的颜色是蓝色!";
        break;
    case "green":
        echo "你喜欢的颜色是绿色!";
        break;
    default:
        echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}

Perl模块中包含了初始代码和子程序。当模块文件被载入时,Perl会根据是否返回TRUE来判断代码是否成功执行。即使没有初始代码,Perl仍然期望最后的语句需返回TRUE,否则会报错。

php数组##

网友们的看法:

“这个通常让我有不安的感觉。” Drew Hall

“这是最无实用价值的用法了。”Schwern

3. C/C++:三字母词用法

问题描述:

举例来说,系统看到??!会把它自动转为|,看到??(会转为[。这很容会引起造成意想不到的结果,并且会大大降低代码的可读性。

成因分析:

早期进行编程时,键盘上还不能直接打出某些特殊字符,例如大括号。因此用了这种间接的方法。

网友们的看法:

“博学如谷歌,也一定看不懂什么是??!??!” Isaac

“自1977年有了三字母词,C就变得晦涩难懂了。”Martin Beckett

4. PHP:大小写敏感处理

问题描述:

PHP对大小写处理比较混乱,有些地方区分,有些地方不区分。例如:变量名,常量名区分;函数名,方法名,类名不区分。