【PHP学习笔记】基本语法部分

仅记录区别于我自己已学的其他语言语法存在差异之处。

两种打印语句

拷贝代码后自行运行查看效果即可

<?php
    /*
    echo 和 print 区别:
        echo - 可以输出一个或多个字符串
        print - 只允许输出一个字符串,返回值总为 1
        提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
    */

    //echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
    echo "<h2>PHP echo 语句</h2>";
    echo "echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。<br />";
    
    echo "使用echo显示变量<br />";
    $num1 = 1;
    echo $num1;
    echo "<br />";

    $num2 = 2;
    $arr = array("shenjie","沈杰");
    echo "使用echo拼接显示变量:num1 = $num1; num2 = $num2 ,数组变量使用大括号囊括{$arr[0]} {$arr[1]}<br />";
    echo "注意字符串和变量混合使用时,变量前后用空格与字符串隔开";

    print "<h2>PHP print 语句</h2>";
    print "print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。<br />";
    print "使用print显示变量<br />";
    print $num1;
    print "<br />";
    
    print "使用print拼接显示变量:num1 = $num1; num2 = $num2 ,数组变量使用大括号囊括{$arr[0]} {$arr[1]}<br />";
    print "注意字符串和变量混合使用时,变量前后用空格与字符串隔开";
    ?>

EOF文本块

<?php
    $name = "沈杰";

    echo <<<EOF
        <h1>PHP EOF(heredoc) 使用说明</h1>
        <p>PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。</p>
        
        <span>使用概述:<br />
            1. 必须后接分号,否则编译通不过。<br />
            2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。<br />
            3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)<br/>
            4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。<br/>
            5. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。<br>
        </span>
      EOF;
    // 结束需要独立一行且前后不能空格


    echo "<h1>将EOF文本块定义为变量后输出</h1>";
    $a= <<<EOF
        <p>"ABC":$name</p>
        "123"

    EOF;

    echo $a;//EOF文本块被当做变量输出
    ?>

发现一个有趣的情况:即便不使用EOF关键字,只要格式正确依然能够正常运行,比如如下这段代码:

<?php
echo <<<沈杰
   <p>即便这样也能正常运行~~~</P>
沈杰;

?>

变量

<?php
    /*
    多行注释
    */
    //单行注释
    $x = 5; // 全局变量

    function myTest()
    {
        $y = 10; // 局部变量
        echo "变量 y 为: $y<br />";
        global $x;  //获取全局变量x
        echo "变量 x 为:$x<br />";


        static $z = 0;
        $z++;
        echo "每次调用都能保持存在的变量 z 为:$z<br />";
    }

    myTest();

    echo "<p>测试函数外变量:<p>";
    echo "变量 x 为: $x<br />";

    myTest();
    myTest();
    myTest();
    ?>

常量

<?php
    echo "<h1>常量</h1>";
    echo <<<eof
        <pre>
        // 区分大小写的常量名
        define("GREETING", "欢迎访问 Runoob.com");
        echo GREETING;    // 输出 "欢迎访问 Runoob.com"
        echo '<br>';
        echo greeting;   // 输出 "greeting"
        </pre>
    eof;

    // 区分大小写的常量名
    define("GREETING", "欢迎访问 Runoob.com", false);
    echo GREETING;    // 输出 "欢迎访问 Runoob.com"
    echo '<br>';
    echo GREETING;   // 输出 "greeting"

    /*
    echo <<<eof
    <pre>
    // 不区分大小写的常量名
    define("GREETING", "欢迎访问 Runoob.com", true);
    echo greeting;  // 输出 "欢迎访问 Runoob.com"
    </pre>
    eof;
    */
    // 不区分大小写的常量名(以下代码运行报错,不赞成使用不区分大小写的常量)
    //define("GREETING1", "欢迎访问 Runoob.com", true);
    //echo greeting1;  // 输出 "欢迎访问 Runoob.com"



    echo <<<eof
    <h1>实际测试结果</h1>
    <p><b>最新的PHP版本中,常量一律都区分大小写了!!!</b></p>
    eof;
    ?>

部分超级全局变量

<?php
echo <<<eof
   <h1>PHP超级全局变量</h1>
   超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。
   <br>
   <p>PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。
   <br>
   PHP 超级全局变量列表:</p>
   <ul>
   <li>\$GLOBALS</li>
   <li>\$_SERVER</li>
   <li>\$_REQUEST</li>
   <li>\$_POST</li>
   <li>\$_GET</li>
   <li>\$_FILES</li>
   <li>\$_ENV</li>
   <li>\$_COOKIE</li>
   <li>\$_SESSION</li>
   </ul>
   <hr>
   
   <h1>\$GLOBALS</h1>
   该是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。以下实例介绍了如何使用超级全局变量 \$GLOBALS:<br>
   <pre>
   \$num1 = 1; //定义一个变量num1<br>
   \$num2 = 2; //定义一个变量num2<br>
   //使用一个未定义变量result<br>
   \$GLOBALS['result'] = \$GLOBALS['num1']+\$GLOBALS['num2'];<br>
   </pre>
eof;

$num1 = 1;
$num2 = 2;
$GLOBALS['result'] = $GLOBALS['num1'] + $GLOBALS['num2'];
echo '使用GLOBALS访问未定义变量result:', $GLOBALS['result'], '<br>使用result的变量名访问:', $result, '<hr>';
?>
<h1>$_SERVER</h1>
<p>
   $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。<br>

   以下实例中展示了如何使用$_SERVER中的元素:
</p>
<pre>
echo $_SERVER['PHP_SELF'];

echo $_SERVER['SERVER_NAME'];

echo $_SERVER['HTTP_HOST'];

//echo $_SERVER['HTTP_REFERER'];

echo $_SERVER['HTTP_USER_AGENT'];

echo $_SERVER['SCRIPT_NAME'];
</pre>
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo "变量_SERVER['HTTP_REFERER']未能正常辨认,已被注释!";
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
<p>
   <b>
      注意:关于$_SERVER的其他项内容,请参考链接:
      <a href="https://www.runoob.com/php/php-superglobals.html">https://www.runoob.com/php/php-superglobals.html</a>
   </b>
</p>
<hr>

<h1>$_REQUEST</h1>
<p>
   PHP $_REQUEST 用于收集HTML表单提交的数据。
   <br>
   以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至&lt;form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据
</p>

<hr>

<h1>$_POST</h1>
<p>
   PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
   <br>
   以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据
</p>

特殊的数组——关联数组

<?php
echo '<h1>特殊数组:关联数组</h1>';
echo '传统数组的key是自然数,又被称为角标;而关联数组的key的名称则是由数组初始化时所指定。<hr>';

$age = array("Peter" => "35", "Ben" => "37", "Joe" => "43");
echo "Peter is " . $age['Peter'] . " years old.";
echo '<br>';
foreach ($age as $x => $x_value) {
   echo "Key=" . $x . ", Value=" . $x_value;
   echo "<br>";
}

部分魔术常量

<!DOCTYPE html>
<html lang="zh">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
</head>

<body>
   <h1>
      PHP 魔术常量
   </h1>
   <p>
      PHP 向它运行的任何脚本提供了大量的预定义常量。
      <br>
      不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
      <br>
      有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
      <br>
      例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写.
   </p>

   <h1>__LINE__</h1>
   <p>文件中的当前行号:</p>
   <?php
   echo "当前输出语句所在第", __LINE__, "行";
   ?>

   <hr>
   <h1>__FILE__</h1>
   <p>
      文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
      <br>PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
      <br>
      实例:
   </p>

   <?php
   echo "本文件名为:", __FILE__;
   ?>
   <hr>

   <h1>__DIR__</h1>
   <p>
      文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
      <br>
      它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
   </p>
   <?php
   echo "本文件所在文件夹的全路径为:", __DIR__;
   ?>
   <hr>
   <h1>__FUNCTION__</h1>
   <p>
      函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
   </p>
   <?php
   function testFun()
   {
      echo "当前函数的函数名为:", __FUNCTION__;
   }
   testFun();
   ?>

   <hr>


   <h1>__CLASS__</h1>
   <p>
      类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
      <br>PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4__CLASS__trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
   </p>

   <?php
   class test
   {
      function _print()
      {
         echo '类名为:'  . __CLASS__ . "<br>";
         echo  '函数名为:' . __FUNCTION__;
      }
   }

   $newObj = new test();
   $newObj->_print();
   ?>

   <hr>

</body>

</html>

内置的数组排序功能

<?php
    $numbers = array(4, 6, 2, 22, 11);
    echo '<h1>升序排序函数sort</h1>';
    sort($numbers);
    for ($i = 0; $i < count($numbers); $i++) {
        echo $numbers[$i], '<br>';
    }
    echo '<h1>降序排序函数rsort</h1>';
    rsort($numbers);
    for ($i = 0; $i < count($numbers); $i++) {
        echo $numbers[$i], '<br>';
    }

    echo '<h1>对于关联数组,按value升序排序asort</h1>';
    $age = array('Peter' => '35', 'Ben' => '37', 'Joe' => '43');
    asort($age);
    foreach ($age as $key => $value) {
        echo $key, ':', $value, '<br>';
    }

    echo '<h1>对于关联数组,按key升序排序ksort</h1>';
    $age = array('Peter' => '35', 'Ben' => '37', 'Joe' => '43');
    ksort($age);
    foreach ($age as $key => $value) {
        echo $key, ':', $value, '<br>';
    }
    ?>

特殊的elseif

<?php
    echo '<h1>注意观察源代码中elseif的else与if之间是直接相连没有使用空格隔开的</h1>';

    $t = date("H");
    if ($t < "10") {
        echo "Have a good morning!";
    } elseif ($t < "20") {
        echo "Have a good day!";
    } else {
        echo "Have a good night!";
    }
    ?>

面向对象部分

成员变量的申明部分需要额外注意与其他语言的区别

<?php
class phpClass
{
    public $var1;
    var $var2;
    //public var $var3; //这种定义会报错

    public function __construct()
    {
        $var1 = 1;
        $var2 = 2;
        echo $var1,$var2;
    }

    public function __destruct()
    {
        echo "对象被销毁<br>";
    }
}

//创建对象
$obj1 = new phpClass;
echo "<br>";
$obj2 = new phpClass();


//调用方法
echo "<br>";
//$obj1.__construct();//使用点的方式调用不了
$obj1->__construct();//只能通过指向方式调用
echo "<br>";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章