• PHP2:语法结构


    PHP2:语法结构

    数值与字符串

    整数,实数,字符串

    PHP浮点数的取值范围和C语言的DOUBLE双精相同,如果浮点数不到10E16,而且没有小数部分,则显示时会按整型的样子显示出来。这时要注意,它的内部是浮点型而不是整型。

    小数表示法:888.8

    字符串:单引号串,双引号串,反引号串,转移字符(""双引号,""反斜线,"n换行,"tTAB

    echo "path=$PATH";   这时候会输出当前文件的路径即环境变量

    echo 'path=$PATH';    这时候会输也这个字符串

    反引号:引号内得是命令

    常量和变量

    系统常量:

    __FILE__这个默认常量是 PHP 程序文件名。若引用文件 (include require)则在引用文件内的该常量为引用文件名,而不是引用它的文件名。

    __LINE__这个默认常量是 PHP 程序行数。若引用文件 (include require)则在引用文件内的该常量为引用文件的行,而不是引用它的文件行。

    PHP_VERSION这个内建常量是 PHP 程序的版本,如 '3.0.8-dev'

    PHP_OS这个内建常量指执行 PHP 解析器的操作系统名称,如 'Linux'

    TRUE这个常量就是真值 (true)

    FALSE这个常量就是伪值 (false)

    E_ERROR这个常量指到最近的错误处。

    E_WARNING这个常量指到最近的警告处。

    E_PARSE本常式为解析语法有潜在问题处。

    E_NOTICE这个常式为发生不寻常但不一定是错误处。例如存取一个不存在的变量。

    这些 E_ 开头形式的常量,可以参考 error_reporting() 函数,有更多的相关说明。

    当然在程序写作时,以上的默认常量是不够用。define() 的功能可以让我们自行定义所需要的常量。见下例

    <?php

    define("COPYRIGHT", "Copyright &copy; 2000, netleader.126.com");

    echo COPYRIGHT; 

    ?>

    .....

    自定义常量:

    define("definename","VALUE");

    变量类型:

    interger,duble,string,array,object,boolean(1true,0false)

    变量使用:

    严格区分大小写

    局部变量,局域于函数内。

    全局变量,作用于主程序。

    $GLOBALS数组与global声明

    函数里面要使用全局变量的时候要用global来声明。例:

    function myfunc(){

    global $PHP_SELF;

    echo $PHP_SELF;

    }

    myfunc();

    注意:PHP函数是不区分大小写的

    静态变量:

    static $mystr;

    $mystr="hello";

    echo $mystr;

    变量的变量:

    a="hello";

    $$a="world";

    echo "$a,$hello"; //hello,world

    echo "$a,${$a}"; //hello,world

    隐式类型转换

    $a[0]=123;

    $a[1]=234;

    echo $a;    //显示Array

    $b="123abc";

    echo $b+1; //显示124

    echo $b."123"; //显示123abc123

    $a=12345678901234;

    $b=12345678901234;

    $c=$a+$b;

    $d=“123abc”;

    echo $c;   //24691357802468

    echo (int)$c;  //-2147483648

    echo(int)$d; //123

    运算符

    算术运算符

    例子

    名称

    结果

    -$a

    取反

    $a 的负值。

    $a + $b

    加法

    $a 和 $b 的和。

    $a - $b

    减法

    $a 和 $b 的差。

    $a * $b

    乘法

    $a 和 $b 的积。

    $a / $b

    除法

    $a 除以 $b 的商。

    $a % $b

    取模

    $a 除以 $b 的余数。

    位运算符

    例子

    名称

    结果

    $a & $b

    And(按位与)

    将把 $a 和 $b 中都为 1 的位设为 1。

    $a | $b

    Or(按位或)

    将把 $a 或者 $b 中为 1 的位设为 1。

    $a ^ $b

    Xor(按位异或)

    将把 $a 和 $b 中不同的位设为 1。

    ~ $a

    Not(按位非)

    将 $a 中为 0 的位设为 1,反之亦然。

    $a << $b

    Shift left(左移)

    将 $a 中的位向左移动 $b 次(每一次移动都表示乘以 2)。

    $a >> $b

    Shift right(右移)

    将 $a 中的位向右移动 $b 次(每一次移动都表示除以 2)。

    比较运算符

    例子

    名称

    结果

    $a == $b

    等于

    TRUE,如果 $a 等于 $b。

    $a === $b

    全等

    TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)

    $a != $b

    不等

    TRUE,如果 $a 不等于 $b。

    $a <> $b

    不等

    TRUE,如果 $a 不等于 $b。

    $a !== $b

    非全等

    TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)

    $a < $b

    小与

    TRUE,如果 $a 严格小于 $b。

    $a > $b

    大于

    TRUE,如果 $a 严格 $b。

    $a <= $b

    小于等于

    TRUE,如果 $a 小于或者等于 $b。

    递增/递减运算符

    例子

    名称

    效果

    ++$a

    前加

    $a 的值加一,然后返回 $a。

    $a++

    后加

    返回 $a,然后将 $a 的值加一。

    --$a

    前减

    $a 的值减一, 然后返回 $a。

    $a--

    后减

    返回 $a,然后将 $a 的值减一。

    逻辑运算符

    例子

    名称

    结果

    $a and $b

    And(逻辑与)

    TRUE,如果 $a 与 $b 都为 TRUE。

    $a or $b

    Or(逻辑或)

    TRUE,如果 $a 或 $b 任一为 TRUE。

    $a xor $b

    Xor(逻辑异或)

    TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。

    ! $a

    Not(逻辑非)

    TRUE,如果 $a 不为 TRUE。

    $a && $b

    And(逻辑与)

    TRUE,如果 $a 与 $b 都为 TRUE。

    $a || $b

    Or(逻辑或)

    TRUE,如果 $a 或 $b 任一为 TRUE。

    居然有2种写法,如果你使用C/C++,C#,Java等语言的话,就用“&&"”||"吧。如果你是VB的话,就用and,和or。当然你也可以2种都用。它们有什么区别呢?优先级的不同而已。”&&“"||"”and“”or“优先级要高。

    数组运算符

    例子

    名称

    结果

    $a + $b

    联合

    $a 和 $b 的联合。

    $a == $b

    相等

    如果 $a 和 $b 具有相同的键/值对则为 TRUE。

    $a === $b

    全等

    如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。

    $a != $b

    不等

    如果 $a 不等于 $b 则为 TRUE。

    $a <> $b

    不等

    如果 $a 不等于 $b 则为 TRUE。

    $a !== $b

    不全等

    如果 $a 不全等于 $b 则为 TRUE。

    其它几种运算符

    ·首先看看位运算里的左移(<<)或右移(>>),其实没有什么不同,只是符号不一样而已。

    ·看看比较运算法里的=====”,这两个比较有意思,它们有什么区别呢?

     1 <?php
     2 var_dump(0 == "a"); // 0 == 0 -> truePHP里,如果整型和字符串比较时,字符串会自动的转化为数值
     3 var_dump("1" == "01"); // 1 == 1 -> true
     4 
     
    5 switch ("a") {
     6 case 0:
     7    echo "0";
     8    break;
     9 case "a": // never reached because "a" is already matched with 0
    10    echo "a";
    11    break;
    12 }

    字符串转化为数值的原则是什么?

    1)如果包括“.”“e”“E”其中任何一个字符的话,字符串被当作 float来求值。否则就被当作整数。

     2)该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。

    ===3个等于符号,它表示不仅最后转化的数值相等,而且类型也应该相等。

    赋值运算符

    <?php
     
    $a='hello'; //$ahello
     $a+=1;      //$a1,二元赋值符
     $b='world';
     
    $c='hello';
     
    $c.=$b;//$c"hello world"
    ?>

    错误执行运算符

    PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉

    如果激活了 track_errors特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg 中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。

    例如:

    <?php
    /* Intentional file error */
    $my_file = @file ('non_existent_file') or
       
    die ("Failed opening file: error was '$php_errormsg'");
    // this works for any expression, not just functions:
    $value = @$cache[$key];
    // will not issue a notice if the index $key doesn't exist.
    ?> 

    执行运算符

    PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec()相同。反引号位于键盘的”~“键那里。

    例如:

    1 <?php
    2  $out=`dir c:`;
    3  echo '<pre>'.$out.'</pre>';
    4 ?>

    结果为:

     Volume in drive C has no label.
     Volume Serial 
    Number is A019-7D77

     Directory of C:"

    .....

    递增/递减运算符

    : 递增/递减运算符不影响布尔值。递减NULL值也没有效果,但是递增NULL的结果是 1

    例子

    名称

    效果

    ++$a

    前加

    $a 的值加一,然后返回 $a

    $a++

    后加

    返回 $a,然后将 $a 的值加一。

    --$a

    前减

    $a 的值减一,然后返回 $a

    $a--

    后减

    返回 $a,然后将 $a 的值减

    类型运算符

    PHP 有一个类型运算符:instanceof。instanceof 用来测定一个给定的对象是否来自指定的对象类。instanceof 运算符是 PHP 5 引进的。在此之前用 is_a(),但是 is_a() 已经过时了,最好用 instanceof。

    C#里是is,而Java是instanceof,和PHP一样。

    例如:

     1 <?php
     2 class A { }
     3 class B { }
     4 
     
    5 $thing new A;
     6 
     
    7 if ($thing instanceof A) {
     8     echo 'A';
     9 }
    10 if ($thing instanceof B) {
    11     echo 'B';
    12 }
    13 ?>

    字符运算符

    有两个字符串运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数后。

    数组

    PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树。
    Array的用法

    新建一个Array对象,由于Array是key和value映射的。所以Array支持一定数量以分号分隔的值对。

    <?php
    $arr = array("Hello" => "Word", 12 => true);
    echo $arr["Hello"]; // bar
    echo $arr[12];    // 1
    ?> 

    请记key 可以是整型或者字符串。如果键名是一个整型的标准表达方法,取整,如果是float型,转化为整型。与之对比,值则可以为任何值。
    如果你想实现多维数组如下代码:

    <?php
    $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
    echo $arr["somearray"][6];    // 5
    echo $arr["somearray"][13];  // 9
    echo $arr["somearray"]["a"];  // 42
    ?> 

    新建或删除一个数组对象代码:

     1 ?php
     2 $arr = array(5 => 1, 12 => 2);
     3 $arr[] = 56;    // 相当于 $arr[13] = 56;
     4                 //因为第二个元素的键是12       
     5 $arr["x"] = 42; // 创建一个新元素,且键为字符串
     6                 //"x",值位42.
     7 unset($arr[5]); //删除键位5的元素。
     8 unset($arr);    // 删除整个数组
     9                 //unset()是一函数,从字面的意思上                      
                       //看也知道是撤销设置
    10 ?>

    语句

    三元条件运算符即:$first ? $second : $third

    条件

    if..else

    if (expr) {

     statement

    }

    范例:本例省略大括号。

    <?php

    if (date("D") == "Sat") echo "周末了,狂欢去";

    ?>

    范例:本例的执行部分有三行,不可省略大括号。

    <?php

    if (file_exists("/usr/local/lib/php3.ini")) {

     echo "以下是 PHP3 的配置文件<p><pre>"n";

     readfile("/usr/local/lib/php3.ini");

     echo "</pre>"n";

    }

    ?>

    if (expr) {

     statement1

    } else {

     statement2

    }

    直接看下面的例子

    <?php

    if ($a > $b) {

     echo "a b ";

    } elseif ($a == $b) {

     echo "a 等于 b";

    } else {

     echo "a b ";

    }

    ?>

    switch

    switch (expr) {

     case expr1:

        statement1;

        break;

     case expr2:

        statement2;

        break;

        :

     default:

        statementN;

        break;

    }

    <?php

    switch (date("D")) {

     case "Mon":

        echo "今天星期一";

        break;

     case "Tue":

        echo "今天星期二";

        break;

     case "Fri":

        echo "今天星期五";

        break;

     default:

        echo "今天放假";

        break;

    }

    ?>

    循环

    do..while 循环

    while (expr) {

     statement

    }

    <?php

    $i = 1;

    while ($i <= 10) {

     print $i++;

     echo ". 以后不敢了<br>"n";

    }

    ?>

    while 可以不用大括号来包住执行部分,而使用冒号加上 endwhile。见下例

    <?php

    $i = 1;

    while ($i <= 10):

     print $i++;

     echo ". 以后不敢了<br>"n";

    endwhile;

    ?>

    for 循环

    for (expr1; expr2; expr3) {

     statement

    }

    <?php

    for ($i=1; $i<=10; $i++) {

     echo "$i. 以后不敢了<br>"n";

    }

    ?>

    foreach

    foreach (array_expression as $value)

        statement

    foreach (array_expression as $key => $value)

        statement

     第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将   会得到下一个单元)。

     第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key

    其它的流程控制

    break 用来跳出目前执行的循环,如下例

    <?php

    $i = 0;

    while ($i < 10) {

     if ($arr[$i] == "stop") {

        break;

     }

     $i++;

    }

    ?>

    continue 立即停止目前执行循环,并回到循环的条件判断处,见下例

    <?php

    while (list($key,$value) = each($arr)) {

     if ($key % 2) { // 略过偶数

        continue;

     }

     do_something_odd ($value);

    }

    ?>

    函数和对象

    函数简介:

    分为系统函数和用户函数。

    PHP中的函数FUNCTION包括有返回值的及无返回值。PHP中函数不区分大小写。

    函数原型:

    返回类型函数名称(类型参数1,类型参数2.....;

    系统函数:

    abs(number):取绝对值

    sin,cos,log,log10,exp,pow,pi

    srand(int):随机数种子

    int rand([int min],[int max]):取得随机数值

    ....

    字符串函数:

    strtolower(string str):转小写

    strtoupper(string str):转大写

    trim(string str):删除左右空格

    substr(string string,int start,int [length]):STRING中取定长字符串

    strlen(string str):返回INT类型,取字符串的长度

    strpos(string 母串,string 待查字符,int [offset]):寻找字符串中某字符最先出现处

    strcmp(string str1,string str2):字符串比较

    nl2br(string str):实用HTML格式化

    查找字符串的位置可以使用strpos()以及strrpos().

    替换的话,调用str_replace()以及substr_replace().

    ....

    加密函数:

    md5(string str):返回一个MD5加密的字符串

    文件系统函数:

    filesize(string filename):获取文件的大小

    feof(int fp):是不是到文件尾部

    fopen(string filename,string mode):打开文件或者URL

    fclose(int fp):关闭已打开的文件

    fread()

    .....

    网络函数:

    fsockopen(string hostname,int port,int [error],string p[errorstr],int [timeout]):打开网络的socket链接,取远程文件的内容

    gethostbyname(string hostname):DNS查询,返回IP地址

    ....

    MYSQL数据库函数:

    mysql_connect(string [hostname] [:port],string [username],string [pwd]):mysql服务器链接

    .....

    用户函数

    声明函数:

    function myfunc($arg_1,$arg_2,......)

    {

    ....

    return $retval;

    }

    调用:myfunc(参数列表)

    参数的值,通常使用传值方式输入,也可以使用传址的方式,传入参数的指针。方法就是在参数的前面加上&符号即可。

    变量的作用域:函数作用域和页面作用域(global声明即可)

    函数的嵌套和递归:一个函数调用另一个函数,函数调用自己(注意死循环)

    参数默认值:可以给参数指定默认值。

    例:

    function myfunc($a,$b,$c="默认值"){

    echo ...

    }

    myfunc(3,4);

    myfunc(1,2,"不用默认值 ");

    条件函数的例子:

     1 <?php
     2  $isRequired=true;
     3  if($isRequired)
     4   {
     
    5       function func($op1,$op2)
     6        {
     
    7             return $op1+$op2;
     8       }
     
    9   }
    10   if($isRequired)
    11      echo "func(1,3)=".func(1,3);
    12    
    13    function helloWorld()
    14    {
    15         return "Hello,world";
    16    }
    17     echo '<br>Call function helloWorld():'.helloWorld();
    18 ?>

    输出结果为:

    func(1,3)=4
    Call 
    function helloWorld():Hello,world

    函数中的函数:

     1 <?php
     2 function func()
     3 {
     4   function subfunc()
     5   {
     6    echo "I don't exist until func() is called."n";
     7    echo "I have alrady made ";
     8   }
     9 }
    10 
    11 /* We can't call subfunc() yet
    12    since it doesn't exist. */
    13 
    14 func();
    15 
    16 /* Now we can call subfunc(),
    17    func()'s processesing has
    18    made it accessable. */
    19 
    20 subfunc();
    21 
    22 ?> 

     输出结果是:

    I don't exist until func() is called. I have alrady made

    对象

    PHP 只有类别 (class)、方法 (method)、属性、以及单一继承 (extensions) 等。

    程序中的 $this 类变量也和 $GLOBALS $php_errormsg 两个变量一样,在 PHP 中属于特殊的变量。$this 变量只用在类类别中,表示类的本身。

    <?php

    // 程序名: cart.inc

    class Cart {

     var $items; // 手推车类

     // 本方法加入 $num 件物品到手推车中 (加到 $artnr 变量)

     function add_item ($artnr, $num) {

        $this->items[$artnr] += $num;

     }

     // 本方法从手推车减少 $num 件物品 ( $artnr 变量减掉)

     function remove_item ($artnr, $num) {

        if ($this->items[$artnr] > $num) {

          $this->items[$artnr] -= $num;

          return true;

        } else {

          return false;

        }  

     }

    }

    ?>

    要使用手推车可以用类似下例的方式。可以先将每个类存成 Include 文件,再将它 require include 进来。在定义变量 $cart 时,要使用 new 的保留字,表示 $cart 使用 Cart 类。使用 -> 符号,表示执行类的方法。

    <?php

    require("cart.inc");

    $cart = new Cart;

    $cart->add_item("10", 1);

    ?>

    之后再设计有记名的手推车。记名手推车从手推车遗传下来,因此手推车拥有的方法及属性,记名手推车也有,而记名手推车比手推车增加了名字的方法 (或许该称属性较恰当)

    从下例中可以看到,子类 Named_Cart 使用 extends 来继承其父类 Cart。虽然 Named_Cart 类中没有增加物品及减少物品的方法,不过由于遗传的特性,父类有的东西它都有。

    <?php

    // 程序名: named_cart.inc

    require("cart.inc");

    class Named_Cart extends Cart {

     var $owner;

     function set_owner ($name) {

        $this->owner = $name;

     }

    }

    ?>

    要使用记名手推车类,请看下面的范例。当然这不算太好的设计,每个子类都一直 require 它的父类,会造成服务器在 I/O 上面的负担。在实作时,可以将整个系列的类在同一个程序文件中,从最早的袓先类到最后的子孙类,也方便日后修正。

    <?php

    require("named_cart.inc");

    $ncart = new Named_Cart;           // 建立类变量

    $ncart->set_owner ("CyberRidder"); // 配置类的记名属性

    echo $ncart->owner;                // 显示类的记名属性

    $ncart->add_item ("10", 1);        // 从父类遗传的方法也可使用

    ?>

    例:

    class foo{

    function do_foo(){

    echo "";

    }

    }

    $doo=new foo;

    $doo->do_foo(); 调用对象中的函数

    引用文件

    引用文件的方法有两种:require include

    require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。

    include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

    程序注释

    <?php

     echo "这是第一种例子。"n"; // 本例是 C++ 语法的注释

     /* 本例采用多行的

         注释方式      */

     echo "这是第两种例子。"n";

     echo "这是第三种例子。"n"; # 本例使用 UNIX Shell 语法注释

    ?>

  • 相关阅读:
    linux学习25 运维加薪技能-Linux特殊权限及facl扩展
    linux学习24 Linux运维必备技能-文件查找命令企业级应用
    linux学习23 Linux运维必备技能-vim编辑器高效用法进阶
    linux学习22 Linux运维必备技能-vim编辑器深入讲解
    linux学习21 运维核心节能-egrep进阶及文本处理工具应用
    linux学习20 运维核心技能-grep命令与基本正则表达式
    【Hadoop离线基础总结】关键路径转化率分析(漏斗模型)
    【Hadoop离线基础总结】Hive级联求和
    【Hadoop离线基础总结】hive的窗口函数
    【Hadoop离线基础总结】网站流量日志数据分析系统
  • 原文地址:https://www.cnblogs.com/astar/p/1179930.html
Copyright © 2020-2023  润新知