walklang / php.gl

0 stars 0 forks source link

PHP基础教程 #7

Open suhao opened 2 years ago

suhao commented 2 years ago

PHP语法

PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。

基本的 PHP 语法

<!DOCTYPE html> 
<html> 
<body> 
<?php
    echo "Hello World!";
?>
</body> 
</html>

PHP 中的注释

<!DOCTYPE html> 
<html> 
<body>

<?php
// 这是 PHP 单行注释
/*
这是 
PHP 多行
注释
*/
?>

</body> 
</html>

PHP输出

PHP echo和print 语句

PHP 是通过 print 和 echo 语句来动态输出 HTML 内容,虽然 print 和 echo 语句两者的功能几乎是完全一样,但是还是有一点差别的。

PHP echo ,print 和 print_r 语句

echo , print 和 print_r的区别:

PHP echo 语句

echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。

<?php
echo "<h2>PHP 很有趣!</h2>";
echo "Hello world!<br>";
echo "我要学 PHP!<br>";
echo "这是一个", " 字符串", " 使用了", " 多个", " 参数。";

$txt1="学习 PHP";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br>";
echo "我车的品牌是 {$cars[0]}";
?>

PHP print 语句

print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。

<?php
print "<h2>PHP 很有趣!</h2>";
print "Hello world!<br>";
print "我要学习 PHP!";

$cars=array("Volvo","BMW","Toyota");
print "<br>";
print "我车的品牌是 {$cars[0]}";
?>

PHP print_r 语句

print_r 显示关于一个变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。

如果给出的是 array,将会按照一定格式显示键和元素。object与数组类似。

使用时必须加上括号:print_r()。

小提示:print_r()会将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。

<?php
print_r("Hello World!");
print_r("Goodbye World!");

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

print_r($txt1);
print_r($cars);
?>
suhao commented 2 years ago

PHP数据类型

虽然 PHP 是一门弱类型语言,在声明和使用变量的时候,并不需要指明其数据类型,但是你也应该了解它的数据类型!

字符串

一个字符串是一串字符的序列,就像 "Hello world!"

<?php 
$x = "Hello world!"; 
echo $x; echo "<br>"; 
$x = 'Hello world!'; 
echo $x; 
?>

整型

整数是一个没有小数的数字。

整数规则:

在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:

<?php 
$x = 5985; 
var_dump($x); 
echo "<br>"; 
$x = -345; // 负数 
var_dump($x); 
echo "<br>"; 
$x = 0x8C; // 十六进制数 
var_dump($x); 
echo "<br>"; 
$x = 047; // 八进制数 
var_dump($x); 
?>

浮点型

浮点数是带小数部分的数字,或是指数形式。

在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:

<?php 
$x = 10.365; 
var_dump($x); 
echo "<br>"; 
$x = 2.4e3; 
var_dump($x); 
echo "<br>"; 
$x = 8E-5; 
var_dump($x); 
?>

布尔型

布尔型可以是 TRUE 或 FALSE。布尔型通常用于条件判断。

$x=true;            
$y=false;

数组

数组可以在一个变量中存储多个值。

在以下实例中创建了一个数组, 然后使用 PHP var_dump() 函数返回数组的数据类型和值:

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

对象

对象数据类型也可以用于存储数据。

在 PHP 中,对象必须声明。

首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。

然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:

<?php 
class Car 
{ 
  var $color; 
  function Car($color="green") { 
    $this->color = $color; 
  } 
  function what_color() { 
    return $this->color; 
  } 
} 
?>

以上实例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。

NULL 值

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。

可以通过设置变量值为 NULL 来清空变量数据:

<?php 
$x="Hello world!"; 
$x=null; 
var_dump($x); 
?>
suhao commented 2 years ago

PHP变量

变量指程序中使用的数值是可以变化的量,与常量(一旦被定义,就无法改变)相反。

变量是用于存储信息的"容器":

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

PHP 变量

与代数类似,可以给 PHP 变量赋予某个值(x=5)或者表达式(z=x+y)。

变量可以是很短的名称(如 x 和 y)或者更具描述性的名称(如 age、carname、totalvolume)。

PHP 变量规则:

注意:

创建(声明)PHP 变量

PHP 没有声明变量的命令。

变量在您第一次赋值给它的时候被创建:

<?php 
$txt="Hello world!"; 
$x=5; 
$y=10.5; 
?>

在上面的语句执行中,变量 txt 将保存值 Hello world!,且变量 x 将保存值 5。

注释:当您赋一个文本值给变量时,请在文本值两侧加上引号。

PHP 是一门弱类型语言

在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。

PHP 会根据变量的值,自动把变量转换为正确的数据类型。

在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。

PHP 变量作用域

变量的作用域是脚本中变量可被引用/使用的部分。

PHP 有四种不同的变量作用域:

局部和全局作用域

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。

在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:

<?php 
$x=5; // 全局变量 

function myTest() 
{ 
    $y=10; // 局部变量 
    echo "<p>Test variables inside the function:<p>"; 
    echo "Variable x is: $x"; 
    echo "<br>"; 
    echo "Variable y is: $y"; 
} 

myTest(); 

echo "<p>Test variables outside the function:<p>"; 
echo "Variable x is: $x"; 
echo "<br>"; 
echo "Variable y is: $y"; 
?>

在以上实例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y 变量在函数内声明所以它是局部变量。

当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。

然后我们在myTest()函数外输出两个变量的值,函数将会输出全局部变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。

注意:你可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内

PHP global 关键字

global 关键字用于函数内访问全局变量。

在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:

<?php 
$x=5; 
$y=10; 

function myTest() 
{ 
global $x,$y; 
$y=$x+$y; 
} 

myTest(); 
echo $y; // 输出 15 
?>

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

上面的实例可以写成这样:

<?php 
$x=5; 
$y=10; 

function myTest() 
{ 
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; 
} 

myTest(); 
echo $y; 
?>

在PHP7版本中,GLOBALS变量处理机制进行了修改,只能引用简单变量,上例输出$y=10

习惯了强类型的同学们是否发现了PHP中的这种魔法方式,变量名的字符串形式可以取得变量的地址和值?如果在C++中如何实现呢? 最直观的方式就是使用宏定义吧。

Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

要做到这一点,请在您第一次声明变量时使用 static 关键字:

<?php 

function myTest() 
{ 
static $x=0; 
echo $x; 
$x++; 
} 

myTest(); 
myTest(); 
myTest(); 

?>

然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。

注释:该变量仍然是函数的局部变量。

参数作用域

参数是通过调用代码将值传递给函数的局部变量。

参数是在参数列表中声明的,作为函数声明的一部分:

<?php 

function myTest($x) 
{ 
echo $x; 
} 

myTest(5); 

?>
suhao commented 2 years ago

PHP常量

常量值被定义后,在脚本的其他任何地方都不能被改变。

常量

常量是一个简单值的标识符。该值在脚本中不能改变。

一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

注意: 常量在整个脚本中都可以使用。

设置 PHP 常量

设置常量,使用 define() 函数,函数语法如下:

define(string constant_name, mixed value, case_sensitive = true)

该函数有三个参数:

以下实例我们创建一个 区分大小写的常量 , 常量值为 "Welcome!":

<?php 
define("GREETING", "Welcome!"); 
echo GREETING; 

define("GREETINGS", "Welcomes!", true); 
echo greetings; 
?>
suhao commented 2 years ago

PHP字符串变量

一个字符串(string)就是由一系列的字符组成,其中每个字符等同于一个字节。字符串变量用于存储并处理文本。

字符串变量

字符串变量用于包含有字符的值。

在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。

在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 "Hello world!" 。然后我们输出 txt 变量的值:

<?php
$txt="Hello world!";
echo $txt;
?>

注释:当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。

并置运算符

在 PHP 中,只有一个字符串运算符。

并置运算符 (.) 用于把两个字符串值连接起来。

下面的实例演示了如何将两个字符串变量连接在一起:

<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>

上面的代码将输出:Hello world! What a nice day!

提示:在上面的代码中,我们已经使用了两次并置运算符。这是由于我们需要在两个字符串之间插入一个空格。

strlen() 函数

有时知道字符串值的长度是很有用的。

strlen() 函数返回字符串的长度(字符数)。

<?php
echo strlen("Hello world!");
?>

提示:strlen() 常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)

strpos() 函数

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

下面的实例在字符串 "Hello world!" 中查找文本 "world":

<?php
echo strpos("Hello world!","world");
?>

上面的代码将输出:6

提示:在上面的实例中,字符串 "world" 的位置是 6。之所以是 6 而不是 7 的原因是,字符串中第一个字符的位置是 0,而不是 1。

suhao commented 2 years ago

PHP控制结构

PHP 条件语句

条件语句用于根据不同条件执行不同动作。

当您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。

在 PHP 中,提供了下列条件语句:

PHP循环

在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行。我们可以在代码中使用循环语句来完成这个任务。

在 PHP 中,提供了下列循环语句:

while 循环

while 循环将重复执行代码块,直到指定的条件不成立

do...while 语句

do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环

for 循环

for 循环用于您预先知道脚本需要运行的次数的情况

foreach 循环

foreach 循环用于遍历数组,它根据数组中每个元素来循环代码块

suhao commented 2 years ago

PHP魔术常量

PHP 向它运行的任何脚本提供了大量的预定义常量。

不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:

LINE

<?php
    echo '这是第 “ '  . __LINE__ . ' ” 行';
?>

FILE

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

DIR

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

FUNCTION

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

CLASS

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字

TRAIT

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法

METHOD

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)

NAMESPACE

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)

suhao commented 2 years ago

PHP超级全局变量

什么是 PHP 超级全局变量?超级全局变量是在全部作用域中始终可用的内置变量

超级全局变量在PHP 4.1.0之后被启用,是PHP系统中自带的变量,在一个脚本的全部作用域中都可用

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

$GLOBALS

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

<?php 
$x = 75; 
$y = 25;

function addition() 
{ 
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}

addition(); 
echo $z; 
?>

$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

$_REQUEST

PHP $_REQUEST 用于收集HTML表单提交的数据。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至

标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据

$_POST

PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。

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

$_GET

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

$_GET 也可以收集URL中发送的数据。