初识PHP语法

系列文章目录

提示:以下是本篇文章正文内容,下面案例可供参考


一、PHP常用注释

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

二、安装好PHP后可以用phpinfo();做测试是否安装好PHP

代码如下(示例):

<?php
phpinfo();
?>

二、变量

变量是用于储存信息的一个类似盒子一样的东西

<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>

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

三、PHP变量规则

1.类命名
(1)使用camel命名法(这个几乎所有语言通用)

(2)尽量少于3个词

(3)缩写词也不要全部使用大写字母。eg:使用GetHtmlStatic, 而不使用GetHTMLStatic。

2.函数和方法命名

通常每个方法和函数都执行一个动作,所以对它们的命名应该清楚地说明它们的用途。

eg:用CheckForErrors()代替ErrorCheck(),用DumpDataToFile代替DataFile().

3.类属性命名

属性命名应该以字符"m" 为前缀。前缀”m“后采用于类命名一致的规则。

eg: var mVar;

4.变量命名

使得所有的变量在代码中看起来都不同,容易辨认.

局部变量命名:所有字母都使用小写,使用 ”_“ 作为每个词的分界

eg:$time_of_error

全局变量命名:带前缀 "g"

eg: global $gLog;

静态变量命名:带前缀 "s"

eg: static $msStatics = 0;

引用变量命名:带前缀 ”r“

eg: var mrStatus;

string,字符串型,在变量前面加str

四、PHP中echo和print的区别

一般来说,PHP中动态输出HTML内容,是通过print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。
echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。

他们的区别在于

(1)echo可以输出多个字符串,像下面这样:

echo 'a','b','c';

如果你非要加上圆括号,注意写成echo (‘a’,‘b’,‘c’);是错误的,应该写成:

它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:

$ret = print 'Hello World';

所有它能用在更复杂的表达式中。
另外,echo的效率相对比较快!

看看如下代码:

<?php
$a='hello ';$b='php world!';echo $a,$b.'<br />';//echo 可以用逗号分隔字符串变量来显示
print $a.$b.'<br />';//而print不能使用逗号,只能用点号分隔,
//print $a,$b.'<br />';//这里使用逗号时报错。
?>

PHP EOF(heredoc) 使用说明

PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
使用概述:

  1. 必须后接分号,否则编译通不过。
  2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  5. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
<?php
echo <<<EOF
        <h1>我的第一个标题</h1>
        <p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>

注意

1.以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。

2.开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。

3.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 . 或 , 来拼接,如下:

<?php
$name="runoob";
$a= <<<EOF
        "abc"$name
        "123"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>

四、数据类型

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

常量

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

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

<?php
// 不区分大小写的常量名
define("GREETING", "欢迎访问 c.isme.pub", true);
echo greeting;  // 输出 "欢迎访问 c.isme.pub"
?>

并置运算符

<?php
$txt1="Hello";
$txt2="wowo";
echo $txt1 . " " . $txt2;
?>

获取字符串长度

<?php
echo strlen("Hello wowo");
?>

查找字符或指定文本

?php
echo strpos("Hello wowo","wowo");
?>

递增,递减

<?php
$x=10; 
echo ++$x; // 输出11
 
$y=10; 
echo $y++; // 输出10
 
$z=5;
echo --$z; // 输出4
 
$i=5;
echo $i--; // 输出5
?>
‘==’ 和 ‘===’的区别
== 值相等
===值和类型都相等

三元运算

(expr1) ? (expr2) : (expr3)

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

php条件语句

if...elseif....else
if (判断条件)
{
    if 条件成立时执行的代码;
}
elseif (条件)
{
    elseif 条件成立时执行的代码;
}
else
{
    条件不成立时执行的代码;
}

switch

<?php
switch (n)
{
case label1:
    如果 n=label1,此处代码将执行;
    break;
case label2:
    如果 n=label2,此处代码将执行;
    break;
default:
    如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>

while

<html>
<body>

<?php
$i=1;
while($i<=5)
{
    echo "The number is " . $i . "<br>";
    $i++;
}
?>

</body>
</html>

for

<?php
for ($i=1; $i<=5; $i++)
{
    echo "数字为 " . $i . PHP_EOL;
}
?>

数组

数组是一个能在单个变量中存储多个值的特殊变量。
在 PHP 中,array() 函数用于创建数组:

array();

在 PHP 中,有三种类型的数组:

数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组

自动分配 ID 键(ID 键总是从 0 开始):

$cars=array("Volvo","BMW","Toyota");

人工分配 ID 键:

$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="Toyota";

count() 函数用于返回数组的长度(元素的数量):

<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?>

遍历并打印数值数组中的所有值,您可以使用 for 循环,如下所示:

<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
 
for($x=0;$x<$arrlength;$x++)
{
    echo $cars[$x];
    echo "<br>";
}
?>

五、运算符

算数运算符

+-*/% 取余
- 取反
. 并置,连接符

递增/递减运算符

++x 预递增
x++ 后递增
--x 预递减
x-- 后递减
注:不管运算符是前置还是后置,对x的结果都是递增或递减的,前置后置影响的是运算符处理后的结果

比较运算符

== 等于
=== 绝对等于,类型也要一致
!=或者<> 不等于
!=== 不等于或者类型不同
> 大于
< 小于
>= 大于等于
<= 小于等于

逻辑运算符

and或者&& 并且
or或者||  或者,至少一个为真
xor 异或,有且仅有一个为真
!

三元运算符

 语法格式如下,相当于if...else... 
(expr1) ? (expr2) : (expr3) 
注:在 PHP7+ 版本多了一个 NULL 合并运算符 ??, 相当于js中 ||  
<?php
// 如果 $_GET['user']存在则返回本身,不存在返回 'nobody'
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

组合比较符(PHP7+)

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

位运算符

# [php--关于位运算符](http://www.cnblogs.com/exceed/p/5034760.html)

常见四个位运算符:&(按位与),|(按位或),^(按位异或)~(按位取反)

&(按位与):对应位同时为1时,在&运算后则为1,否则为0

|(按位或):对应位有一个为1时,在|运算后则为1,同为0时则为0

^(按位异或):对应位不同时为1时,在^运算后为1,同时为0时则为0,同时为1^运算后也是0

~(按位取反):$a+(~$a)=-1

在计算机中,负数以其正值的补码形式表达。
 在这里我们就要知道三个概念了,原码,反码和补码。

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

8的原码为:0000 0000 0000 0000 0000 0000 0000 1000

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:10018按位取反:1111 1111 1111 1111 1111 1111 1111 0111

补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

正数的补码与其原码相同;负数的补码是在其反码的末位加1

反码加11000 0000 0000 0000 0000 0000 000 1001;这样就得负数的正值的补码形式。也就是-9了。

参考:http://www.cnblogs.com/setsail/archive/2013/05/22/3093542.html

   http://my.oschina.net/WarRome/blog/90707

以上解释自己也没有看的太懂,但实践得出$a+(~$a)=-1

小例如下:

<?php
$m=8;
$n=12;
$p=-109;
$mn=$m&$n;
echo $mn."<br>";
$mn=$m|$n;
echo $mn."<br>";
$mn=$m^$n;
echo $mn."<br>";
$mn=~$m;
echo $mn."<br>";
$mn=~$p;
echo $mn."<br>";
?>

输出结果:

8
12
4
-9
108

关于按位取反的问题,再琢磨琢磨

运算符优先级

运算符优先级

注:整理来看优先级,算术 >> 逻辑 > 赋值

六、PHP函数

函数是什么

暂且先记住这句话:
能够将一段代码封装成一个处理某个特定问题的代码块, , 通过调用的方式来执行, 从而简化代码编写的方法

函数结构分析

<?php
    // 函数定义
    function get_sum($a, $b) {
        return $a + $b;
    }

    // 函数的调用
    $sum = get_sum(2, 3);
    echo $sum; // 5
?>

构成部分:

  1. 关键字: function
  2. 函数名: get_sum
  3. 命名规则: 有效的函数名以字母或下划线开头, 后面可以跟着字母, 数字或下划线
  4. 参数列表: ($a, $b)
  5. 函数体: { return $a + $b }
  6. 返回值: return $a + $b;

定义:
(a) 值通过使用可选的返回语句返回
(b) 可以返回数组和对象的任意类型
© 返回语句会立即终止函数的运行, 并且将控制权交回调用该函数的代码行

为什么使用函数呢

例子: 从一组数据中找出最大的数

<?php
    // 从第一组数据中找出最大的数
    $arr1 = array(3, 99, 789, 34, 43, 435);
    $max1 = $arr1[0]; // 先将数组的第一个数据设为最大值
    foreach($arr1 as $v1) {
        // 如果当前的 $max1 小于$v1
        if ($max1 < $v1) {
            $max1 = $v1;
        }
    }
    echo $max1; // 789

    echo '<br />';

    // 从第二组数据中找出最大的数
    $arr2 = array(34, 45, 5463, 2452, 32452);
    $max2 = $arr2[0]; // 先将数组的第一个数据设为最大值
    foreach($arr2 as $v2) {
        // 如果当前的 $max2 小于$v2
        if ($max2 < $v2) {
            $max2 = $v2;
        }
    }
    echo $max2; //32452

    // 如果多组数据...
?>

上面的代码实现了对一组数据取最大值,
如果我们有很多组这样的数据要取最大值,
那么就要重复的编写上面代码, 但这样是很浪费的一种行为, 这时候我们就可以通过封装一个函数的方法, 通过调用函数的方式来简化我们的编码:

<?php
    // 取最大值
    function max_num($arr) {
        $max = $arr[0]; // 先将数组的第一个数据设为最大值
        foreach($arr as $v) {
            // 如果当前的 $max1 小于$v1
            if ($max < $v) {
                $max = $v;
            }
        }
        return $max;
    }

    // 从第一组数据中找出最大的数
    $arr1 = array(35,34532,567,564,345);
    $max_val1 = max_num($arr1);
    echo $max_val1; // => 34532

    echo '<br />';

    // 从第二组数据中找出最大的数
    $arr2 = array(7894, 45, 345, 45, 56, 5);
    $max_val2 = max_num($arr2);
    echo $max_val2; // => 7894

    echo '<br />';

    // ...
?>

函数特性介绍

<?php
    function get_sum($a, $b) {
        
        $result = $a + $b;
        
        return $result;
    }

    // 函数的调用
    $sum = get_sum(2, 3);
    echo $sum;
?>

函数形参与实参

·$a, $b 是函数的形参,
2 , 3 函数调用的实参, 实参可以是表达式, 变量等

形参和实参的数目对应关系:

(a) 如果 实参数目 < 形参数目: 程序报错/警告

(b) 如果 实参数目 = 形参数目: 参数会一一对应

© 如果 实参数目 > 形参数目: 程序会正确执行, 形参的值会一一对应, 比如 get_sum(2, 3, 4, 5), 那么 $a = 2, $b=3

函数的默认值

func ($a, $b, $c, $d = 'default')
{ 
    // .. 
}

上面给了第四个变量设置的默认值, 如果传参的时候没有传第四个参数, 则第四个参数的值为 default

例子:

<?php
    // 函数定义
    function get_sum($a, $b, $c = 60) {

        $result = $a + $b + $c;

        return $result;
    }

    // 函数的调用
    $sum = get_sum(2, 4);
    echo $sum.'<br />'; // 结果: 2 + 4 + 60 = 66
    $sum2 = get_sum(2, 4, 100);
    echo $sum2; // 结果: 2 + 4 + 100 = 106
?>

函数强类型参数
定义: 为参数列表中的参数指定类型, 如果传入的数据类型不匹配, 将会抛出 TypeError 异常,

支持类型:
PHP 5.0.0: class/interface name
PHP 5.1.0: array
PHP 5.4.0: callable
PHP 7.0.0: bool, float, int, string

function get_sum(int $a, int $b) {

        $result = $a + $b;

        return $result;
    }

函数可变参数列表
PHP 5.5及更早版本:
func_num_args(): 返回参数的总数量
func_get_arg(): 返回参数列表的某一项
func_get_args(): 返回一个包含函数参数列表的数组

<?php
    function test() {
        echo '参数总数: ', func_num_args().'<br />'; // 参数总数: 4
        echo '第一个参数: ', func_get_arg(0).'<br />'; // 第一个参数: 1
        echo '全部参数: '; // => 全部参数: 
        print_r(func_get_args()); // => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
    }
    test(1, 2, 3, 4);
?>

PHP 5.6+:
使用 … 语法实现:

<?php
    function test(...$args) {
        echo $args[0].'<br />'; // => 1
        echo count($args).'<br />'; // => 4
        print_r($args); // => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
    }
    test(1, 2, 3, 4);
?>

函数值传递与引用传递
值传递: 不会改变原来实参的值

<?php
    function test($num) {
        $num = 5;
        $result  = $num + 1;
        return $result;
    }

    $num = 4;
    $res = test($num);
    echo $res.'<br />'; // => 6
    echo '$num: '.$num; // => $num: 4 ,$num 的值并没有被修改
?>

引用传递: 通过 & 来实现, 赋值给形参的是引用地址

<?php
    function test(&$num) {
        $num = 5;
        $result  = $num + 1;
        return $result;
    }

    $num = 4;
    $res = test($num);
    echo $res.'<br />'; // => 6
    echo '$num: '.$num; // => $num: 4 ,$num 的值也改变了
?>

函数变量作用域
局部变量:

1.当前页面中声明的普通变量, 不能在函数中或者类中起作用;

<?php
    $a = 12;
    function test() {
        echo $a; // => 报错: Undefined variable: a
    }

    test();
?>

2.当前页面中声明的普通变量, 不能被传递到其他页面;
3.在函数中声明的普通变量, 在函数内部有效;

<?php
    function test() {
        $a = 12;
    }
    test();
    echo $a; // => 报错: Undefined variable: a
?>

4.在类中声明的属性, 在类的内部有效;
全局变量 global

对于 PHP 而言, 可以这么说, 在页面中生成的变量都是全局变量, 在整个页面都是有效, 但是不能被函数或者类中的方法访问;

如果想被函数或者类中的方法访问, 我们就有了超全局变量:
$_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST, $_SEESION

<?php
    $a = 12;
    $b = 24;
    $c = 29;
    function test() {
        global $b;
        echo $a; // => Undefined variable: a
        echo $b.'<br />'; // => 24
        echo $GLOBALS['c']; // => 29
    }

    test();
?>

global 和 GLOBALS 使用的区别: global 是外部同名变量的引用, 而GLOBELS 外部的全局变量的本身

静态变量 static

函数内部声明的变量, 函数执行完即销毁,
而通过 static 声明的静态变量. 函数执行完之后并未丢失

<?php
    function test() {
        $a = 1;
        $a++;
        echo $a;
    }

    test(); // => 2
    echo '<br />';
    test(); // => 2
    // ...
?>

通过 static 标识的静态变量

<?php
    function test() {
        static $a = 1;
        $a++;
        echo $a;
    }

    test(); // => 2
    echo '<br />';
    test(); // => 3
    echo '<br />';
    test(); // => 4
?>

PHP连接mysql

function mysql_con($sql){
    $mysql_name = 'localhost';
    $mysql_user = 'root';
    $mysql_pw = 'root';
    $mysql_db = 'update';
    $conn = mysqli_connect($mysql_name,$mysql_user,$mysql_pw,$mysql_db);
    if(! $conn )
    {
        die('Could not connect: ' . mysqli_error());
    }
    // 设置编码,防止中文乱码
    mysqli_query($conn , "set names utf8");
    $retval = mysqli_query($conn,$sql );
    if(! $retval )
    {
        die('执行sql失败: ' . mysqli_error($conn));
    }
    else{
        echo "执行sql成功\n";
    }
    //释放连接
    mysqli_close($conn);
    //
    return mysqli_fetch_all($retval);
}

php实现上传图片并在数据库中记录图片信息

<html>
<head>
    <meta charset="utf-8">
    <title>upload homework</title>
</head>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>

</body>
</html>
<?php
// 允许上传的图片后缀
function update_mysql($filename)
{
    $nowtime = date('Y-m-d', time());
    $sql = 'insert into upload (filename,date) values (' . '"' . "$filename" . '"' . ',' . '"' . $nowtime . '"' . ')' . ';';
    mysql_con($sql);
}
function mysql_con($sql){
    $mysql_name = 'localhost';
    $mysql_user = 'root';
    $mysql_pw = 'root';
    $mysql_db = 'update';
    $conn = mysqli_connect($mysql_name,$mysql_user,$mysql_pw,$mysql_db);
    if(! $conn )
    {
        die('Could not connect: ' . mysqli_error());
    }
    echo '<p>数据库连接成功!</p>';
    echo $nowtime;
    //$sql = 'insert into upload (filename,date) values (' . '"' . "$filename" . '"' . ',' . '"' . $nowtime . '"'. ')' . ';';
    $retval = mysqli_query($conn,$sql );
    if(! $retval )
    {
        die('插入失败: ' . mysqli_error($conn));
    }
    else{
        echo "插入成功\n";
    }
    mysqli_close($conn);
    return mysqli_fetch_all($retval);
}
function list_book(){
    $sql = 'select * from upload';
    echo $sql;
    $res = mysql_con($sql);
    foreach($res as $key => $value){
        echo "{$key}==>{$value}<br>";
    }

}
function picture(){
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    echo $_FILES["file"]["size"];
    $extension = end($temp);     // 获取文件后缀名
    if ((($_FILES["file"]["type"] == "image/gif")
            || ($_FILES["file"]["type"] == "image/jpeg")
            || ($_FILES["file"]["type"] == "image/jpg")
            || ($_FILES["file"]["type"] == "image/pjpeg")
            || ($_FILES["file"]["type"] == "image/x-png")
            || ($_FILES["file"]["type"] == "image/png"))
        && ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
        && in_array($extension, $allowedExts))
    {
        if ($_FILES["file"]["error"] > 0)
        {
            echo "错误:: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
            echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
            echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
            echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";

            // 判断当期目录下的 upload 目录是否存在该文件
            // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
            if (file_exists("upload/" . $_FILES["file"]["name"]))
            {
                echo $_FILES["file"]["name"] . " 文件已经存在。 ";
            }
            else
            {
                // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
                move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
                echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
                $filename = $_FILES["file"]["name"];
                echo $filename;
                update_mysql($filename);
            }
        }
    }
    else
    {
        echo "非法的文件格式";
    }
}
picture();
//list_book();
?>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值