仅记录区别于我自己已学的其他语言语法存在差异之处。
两种打印语句
拷贝代码后自行运行查看效果即可
<?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" 按钮提交表单数据时, 表单数据将发送至<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>";