php语法学习一(基础语法,变量,常量,数据结构)

  1. php基础语法整理:
    • PHP 脚本以 <?php 开始,以 ?> 结束:
    • php内部每一行代码以;结束
    • php向浏览器的输出命令:echo和print
      • echo - 可以输出一个或多个字符串
      • print - 只允许输出一个字符串,返回值总为 1
      • echo 输出的速度比 print 快, echo 没有返回值,print有返回值1
      •   <?php
              echo "<h2>PHP 很有趣!</h2>";
              echo "Hello world!<br>";
              echo "我要学 PHP!<br>";
              echo "这是一个", "字符串,", "使用了", "多个", "参数。";
              ?>
        
          <?php
              print "<h2>PHP 很有趣!</h2>";
              print "Hello world!<br>";
              print "我要学习 PHP!";
                ?>
        
    • php中的注释和java一致:单行//多行 /** **/
    • php的异常处理和java一致:抛异常(throw)和抓异常(try catch)
      • catch异常针对多异常可以直接抓Exception也可以分类抓Exception后者可以针对不同的异常进行不同的处理,但是以往经验都是统一处理异常,所以前者使用更多。
      • 可以继承Exception自定义自己的实现异常做自己的处理。
      • set_exception_handler('myException');此函数可以设置统一处理异常,将代码异常交给参数异常去处理。
    • php中Error的处理(详情可以参考下面的文章):
      • 使用die函数向用户提示错误提示并直接退出当前php脚本,类似于exit函数。
      • 和Android类似可以通过函数set_error_handler()定义自己的错误处理函数,在函数中通过不同的错误级别进行不同的处理。
      • 配置php错误日志路径,将php的错误日志记录到配置的路径文件中,也可以通过函数error_log()将php错误写到web服务器的错误日志中去。
  2. php中的变量:
    • php的变量规则:
      • 变量以 $ 符号开始,后面跟着变量的名称
      • 变量名必须以字母或者下划线字符开始
      • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
      • 变量名不能包含空格
      • 变量名是区分大小写的(y 和Y 是两个不同的变量)
      • PHP 没有声明变量的命令,变量在您第一次赋值给它的时候被创建。
      • php是弱类型语言,在声明变量的时候不需要声明其类型,且在运行过程中可以修改其数据类型,即:
        • 使用函数settype()函数可以中间修改其类型:
        • 使用函数gettype()可以获取变量的数据类型
        • 使用函数is_type()可以校验变量的数据类型
        • "$var = 123; $str = (string)$var;" 可以将int强转为字符串
        • 使用intval(), floatval(), strval()等函数可以实现数据类型的转化
      • php的变量的作用域:local(局部),global(全局),static(静态),parameter(参数)
        • 局部变量很容易理解,函数内声明的变量,函数外不能够访问
        • 函数外声明的变量都是全局变量,可以在php外在代码中直接访问,奇葩的是在函数内不能够直接访问,需要通过关键字global声明后才能访问,另外PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php
$x=5;
$y=10;
 
function myTest()
{
    global $x,$y;
    $y=$x+$y;
}
 
myTest();
echo $y; // 输出 15
?>

<?php
$x=5;
$y=10;
 
function myTest()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 
 
myTest();
echo $y;
?>
  • static 静态作用域,即局部变量通常在函数外会失去作用域,但是通过static关键字声明后会保留其作用域用于后续的计算。
<?php
function myTest()
{
    static $x=0;
    echo $x;
    $x++;
    echo PHP_EOL;    // 换行符
}
 
myTest();
myTest();
myTest();
?>
运行结果:0 1 2
  • 参数作用域:参数是通过调用代码将值传递给函数的局部变量,参数是在参数列表中声明的,作为函数声明的一部分。
  1. php的常量:
    • PHP 中的常量是指一旦定义后其值不能被改变的标识符
      • 不变性: 常量一旦定义,其值不能改变
      • 全局作用域: 常量在定义后,可以在整个脚本的任何地方使用,无需使用 global 关键字
      • 数据类型: 常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7 及以上版本)
      • 区分大小写: 常量名称默认是区分大小写的。如果需要定义大小写不敏感的常量,可以在 define() 函数的第三个参数设置为 true。
      • 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)
    • php常量的定义语法:
      • 通过函数bool define ( string name , mixedvalue [, bool $case_insensitive = false ] ) 定义常量。
          define("GREETING", "欢迎访问 Runoob.com");
          define("GREETING", "欢迎访问 Runoob.com", true); //php7.3以后仅支持false,即区分大小写字母。
        
      • 通过关键字:const 定义常量: const CONSTANT_NAME = "value";
    • 常量的作用域是全局,且不需要像变量一样需要关键字global声明
    • php系统的预定义常量:
           PHP_VERSION:当前 PHP 解析器的版本。
           PHP_OS:服务器的操作系统。
           PHP_INT_MAX:最大的整数值。
           E_ERROR、E_WARNING、E_PARSE 等:错误报告级别。
      
    • php的常量可以声明为数组(php7以上版本):const COLORS = [ "Red", "Green", "Blue" ]
  2. php中的特殊常量和特殊变量:
    • php中的特殊常量:PHP 向它运行的任何脚本提供了大量的预定义常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
      • LINE:当前文件中的行号
      • FILE:文件的绝对路径和文件名字
      • DIR:当前文件所属的目录,需要注意的是目录没有最后的斜杠\
      • FUNCTION:当前执行的函数的名字
      • CLASS:当前执行的类的名字
      • METHOD:当前执行的方法名字
      • NAMESPACE:当前命名空间的名字
    • php中的系统全局变量:PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用,即在函数中不需要global声明。下面先简单整理几个超级系统全局变量,后面在使用过程中详细解释对应的变量:
           $GLOBALS:函数中可以通过这个变量直接访问全局变量。
           $_SERVER:是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目,通过此数组可以获取到和系统相关的参数属性,具体的参考文章
           $_REQUEST:PHP $_REQUEST 用于收集HTML表单提交的数据。
           $_POST、PHP $_GET:PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"/"method="get",此二者用于api的post和get获取参数。
           $_FILES:和file相关的变量声明
           $_ENV:和当前系统环境相关的变量声明
           $_COOKIE:和cookie相关的变量声明
           $_SESSION:和session相关的变量声明。
      
  3. php中的数据类型:
    • php中数据类型:String(字符串),Integer(整型),Float(浮点型),Boolean(布尔型),Array(数组),Object(对象),NULL(空值),Resource(资源类型)
    • php中字符串可以双引号也可以单引号,双引号可以解析变量和转义字符,单引号不行,习惯于用双引号就好。注意php字符串的连接不是+而是.连接,其他可以参考文章php中字符串的常见操作
    • strpos() 函数用于在字符串内查找一个字符或一段指定的文本:echo strpos("Hello world!","world");
    • php整型integer和java类似,包括十六进制0x前缀和八进制的0前缀。
    • php var_dump() 函数返回变量的数据类型和值
    • php 数组:array:单个变量中存储多个值,php中数组包含三种数组:数值数组,关联数组,多维数组。
      • $array = array(1,2,3,4) 创建一个int数组,通过函数array()创建数组
      • 如上创建的则是数值数组,对应每一个item都有一个下标指向访问,从0开始
      • count()函数可以获取数组的大小
      • 数值数组的遍历:通过count获取其长度后通过for循环进行遍历
      • 关联数组:即每一个item都有其对应的key和value,类似于java中的map,即:$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");此时通过每一个item的key进行访问数组的每一个item
      • 关联数组的遍历:使用强循环foreach进行循环遍历:
          <?php
            $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
            foreach($age as $x=>$x_value)
              {
                echo "Key=" . $x . ", Value=" . $x_value;
                echo "<br>";
                  }
              ?>
        
      • 多维数组:类似于java中的多维数组,此处主要学习二维数组。
        • 二维数组:数组的每一个元素item也是一个数组,被称为二维数组。
        • 二维数组的声明和遍历和排序:
          //二维数组的声明:
          array (
           array (elements...),
           array (elements...),
           ...
          )
          // 二维数组的遍历:
          <?php
          $twoDimensionalArray = [
             [1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]
           ]; 
          foreach ($twoDimensionalArray as $row) {
           foreach ($row as $element) {
                 echo $element . ' ';
             }
           echo "\n"; // 换行,用于分隔不同的行
          }
          ?>
          
          // 二维数组的排序:
          $array = array(
           array('name' => 'John', 'age' => 20),
           array('name' => 'Sally', 'age' => 18),
           array('name' => 'Mark', 'age' => 25)
          );
          // 按照age键的值进行升序排序
          usort($array, function($a, $b) {
           return $a['age'] - $b['age'];
           });
          print_r($array);
          
      • 数组的排序:通过php通过的函数对不同类型数组进行排序:
           sort() - 对数组进行升序排列
           rsort() - 对数组进行降序排列
           asort() - 根据关联数组的值,对数组进行升序排列
           ksort() - 根据关联数组的键,对数组进行升序排列
           arsort() - 根据关联数组的值,对数组进行降序排列
           krsort() - 根据关联数组的键,对数组进行降序排列 
        
    • php中的对象的声明和java类似,通过class声明,声明后有其属性和函数:this指向当前的class。
       <?php
      class Car
        {
          var $color;
          function __construct($color="green") {
          $this->color = $color;
            }
          function what_color() {
          return $this->color;
            }
            }
            ?>
      
    • php资源类型:PHP 资源 resource 是一种特殊变量,保存了到外部资源的一个引用,常见资源数据类型有打开文件、数据库连接、图形画布区域等。get_resource_type(resource $handle): string
       <?php
        $c = mysql_connect();
        echo get_resource_type($c)."\n";
        // 打印:mysql link
      
        $fp = fopen("foo","w");
        echo get_resource_type($fp)."\n";
        // 打印:file
      
        $doc = new_xmldoc("1.0");
        echo get_resource_type($doc->doc)."\n";
        // 打印:domxml document
        ?>
      
    • php中的类型比较:松散比较(==)和严格比较(===),前者比较变量的值,后者比较值的同时比较变量的数据类型。比如42=='42'返回true 若是42==='42'则是返回false,二者值相同,类型不相同。

参考文章:
php中的超级全局变量
php中error的处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容