php基础知识(转载)

在我最近做的一个项目中,我发现了一个新的概念,关于在PHP中使用变量的变量。在我的程序中,我需要在一个页面同时更新多个记录,在我经过相当长时间的痛苦思索之后,脑海中偶然地闪现出了变量的变量这一概念,所有的困惑就一扫而光了。

PHP学习语法:

介绍

  1. 1.echo ———输出语句

什么叫作变量的变量?根据PHP手册,变量的变量是指取得一个变量的值并把它作为另一个变量的变量名。这表述显得相当的直接,容易和那些在一个句子中使用变量这个词弄混淆。给一个简单的例子,你定义一个变量
— x 等于 this — 然后定义一个变量的变量,意味着你把 x
的值作为新变量的名,在这个例子中,这个新变量的值是 is
cake。用PHP来表示如下:

echo “我的第一段 PHP 脚本!”;

?php$x = this;$$x = is cake;?
  1. 2.PHP 脚本以  开头,以 ?> 结尾

这个符号$$是在PHP中对变量的变量的表示方法。现在我们可以用两种不同的方式来引用这两个变量
$x 和 $$x 了。

 

?phpecho $x ${$x};??phpecho $x $this;?

// 此处是 PHP 代码

上面两段程序都将输出 this is
cake。注意,在echo语句中$$x被写成${$x},这是让PHP知道你要输出的是变量的变量而不是一个$字符与$x变量。

?>

你是不是仍很迷惑?哦,也许吧,你想要一些更深入更有用的例子?下一节,我将向你展示怎样用变量的变量在一个页面编辑多条记录的。

  1. 3. 实例:

例子

 

假设你已有一个MySQL数据库,保存了对一些感兴趣的站点的链接,库中有一个表submissions,字段如下:

 

SubmissionID

 

PostedBy

 

Link

 

Description

我的第一张 PHP 页面

 

 

 

echo “Hello World!”;

?>

 

 

 

 

 

PHP 语句以分号结尾(;)。PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。

  1. 4.PHP 代码中的注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读。

PHP有三种注释:(//或者#或者/* */)

// 这是单行注释

# 这也是单行注释

/*

这是多行注释块

它横跨了

多行

*/

5. 在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感。

实例:

 

 

 

 

ECHO “Hello World!
“;

echo “Hello World!
“;

EcHo “Hello World!
“;

?>

 

 

 

运行结果:

 

 

6.不过在 PHP 中,所有变量都对大小写敏感。

实例:

 

 

 

 

 

$color=”red”;

echo “My car is ” . $color . “
“;

echo “My house is ” . $COLOR . “
“;

echo “My boat is ” . $coLOR . “
“;

?>

 

 

 

运行结果:

 

7. 变量是存储信息的容器:

 

$x=5;

$y=6;

$z=$x+$y;

echo $z;

?>

描述:$x,$y,$z代表三个不同的变量。最后输出$z的值

 

 

8. PHP 变量规则:

变量以 $ 符号开头,其后是变量的名称

变量名称必须以字母或下划线开头

变量名称不能以数字开头

变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)

变量名称对大小写敏感($y 与 $Y 是两个不同的变量)

PHP 变量名称对大小写敏感!

 

9. $txt=”Hello
world!”;——–如果您为变量赋的值是文本,请用引号包围该值。

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

 

 

10变量的作用域指的是变量能够被引用/使用的那部分脚本。

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

local(局部)

global(全局)

static(静态)

 

11.Local 和 Global 作用域

函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。

函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。

实例:

 

$x=5; // 全局作用域

 

function myTest()———–实现函数,用于下面的函数调用

 {

  $y=10; // 局部作用域

  echo “

测试函数内部的变量:

“;

 

  echo “变量 x 是:$x”;

  echo “
“;

  echo “变量 y 是:$x”;

} ———-大括号里面创建的变量属于局部变量

 

myTest();———-函数调用

 

echo “

测试函数之外的变量:

“;

 

echo “变量 x 是:$x”;

echo “
“;——-换行符

echo “变量 y 是:$x”;

?>

 

 

 

12. global 关键词用于访问函数内的全局变量。

要做到这一点,请在(函数内部)变量前面使用 global 关键词:

实例:

 

$x=5;

$y=10;

 

function myTest() {

  global $x,$y;

  $y=$x+$y;

}

 

myTest();

echo $y; // 输出 15

?>

 

 

global $x,$y;—-等价于—–
$GLOBALS[‘y’]=$GLOBALS[‘x’]+$GLOBALS[‘y’];

 

13. 通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要更进一步的工作。

要完成这一点,请在您首次声明变量时使用 static 关键词:

实例:

 

 

function myTest() {

  static $x=0;

  echo $x;

  $x++;

}

 

myTest();

myTest();

myTest();

 

?>

 

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

 

14. echo 和 print 之间的差异:

echo – 能够输出一个以上的字符串

print – 只能输出一个字符串,并始终返回 1

 

15. echo 命令来显示字符串和变量

实例:

 

$txt1=”Learn PHP”;

$txt2=”W3School.com.cn”;

$cars=array(“Volvo”,”BMW”,”SAAB”);

 

echo $txt1;

echo “
“;

echo “Study PHP at $txt2”;

echo “My car is a {$cars[0]}”;

?>

 

 

16.PHP中字符串可以是引号内的任何文本。您可以使用单引号或双引号输出

实例:

 

$x = “Hello world!”;

echo $x;

echo “
“; 

$x = ‘Hello world!’;

echo $x;

?>

 

 

17. 整数是没有小数的数字。

浮点数是有小数点或指数形式的数字。

逻辑是 true 或 false。 

PHP var_dump() 会返回变量的数据类型和值:

 实例:

 

$x = 5985;

var_dump($x);

echo “
“; 

$x = -345; // 负数

var_dump($x);

echo “
“; 

$x = 0x8C; // 十六进制数

var_dump($x);

echo “
“;

$x = 047; // 八进制数

var_dump($x);

?>

 

 

18. 数组在一个变量中存储多个值。

实例:

 

$cars=array(“Volvo”,”BMW”,”SAAB”);

var_dump($cars);

?>

 

 

19. 对象是存储数据和有关如何处理数据的信息的数据类型。

 

在 PHP 中,必须明确地声明对象。

首先我们必须声明对象的类。对此,我们使用 class 关键词。类是包含属性和方法的结构。

然后我们在对象类中定义数据类型,然后在该类的实例中使用此数据类型:

实例:

 

class Car

{

  var $color;

  function Car($color=”green”) {

    $this->color = $color;

  }

  function what_color() {

    return $this->color;

  }

}

?>

 

 

20. 特殊的 NULL 值表示变量无值。NULL 是数据类型 NULL 唯一可能的值

可以通过把值设置为 NULL,将变量清空:

 

PHP 字符串函数

1.strlen() 函数返回字符串的长度,以字符计。

实例:

 

echo strlen(“Hello world!”);

?>

 

 

2. strpos() 函数用于检索字符串内指定的字符或文本。如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。

实例:

 

echo strpos(“Hello world!”,”world”);

?>

 

 

3.常量是单个值的标识符(名称)。在脚本中无法改变该值。

有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。

 

4. 如需设置常量,请使用 define() 函数 – 它使用三个参数:

首个参数定义常量的名称

第二个参数定义常量的值

可选的第三个参数规定常量名是否对大小写敏感。默认是 false。

实例:

 

define(“GREETING”, “Welcome to W3School.com.cn!”);

echo GREETING;

?>

 

 

对大小写不敏感的常量,值为 “Welcome to W3School.com.cn!”

实例:

 

define(“GREETING”, “Welcome to W3School.com.cn!”, true);

echo greeting;

?>

 

  1. 5.不同算数运算符

实例:

 

$x=10; 

$y=6;

echo ($x + $y); // 输出 16

echo ($x – $y); // 输出 4

echo ($x * $y); // 输出 60

echo ($x / $y); // 输出 1.6666666666667

echo ($x % $y); // 输出 4

?>

 

 

  1. 6.字符串合并(串接)

实例:

 

$a = “Hello”;

$b = $a . ” world!”;

echo $b; // 输出 Hello world!

 

$x=”Hello”;

$x .= ” world!”;

echo $x; // 输出 Hello world!

?>

 

 

  1. 7.自增/自减运算符————在变量前++或者- –  echo
    ++$x;———变量先+1再做运算,echo
    –$z;————变量先-1再做运算

而echo $y++;——–先运算再+1,echo $i–;———先运算后-1.

 

  1. 8.PHP 比较运算符用于比较两个值(数字或字符串)

===    全等(完全相同)  $x===$y   表示$x等于$y且类型相同才返回true

!== 则相反

 

实例:

 

$x=100; 

$y=”100″;

 

var_dump($x == $y);

echo “
“;

var_dump($x === $y);

echo “
“;

var_dump($x != $y);

echo “
“;

var_dump($x !== $y);

echo “
“;

 

$a=50;

$b=90;

 

var_dump($a > $b);

echo “
“;

var_dump($a < $b);

?>

10.

and

$x and $y

如果 $x 和 $y 都为 true,则返回 true。

or

$x or $y

如果 $x 和 $y 至少有一个为 true,则返回true。

xor

异或

$x xor $y

如果 $x 和 $y 有且仅有一个为 true,则返回true。

11.条件判断:

(1)if….else 语句在条件为 true 时执行代码,在条件为 false 时执行另一段代码。

if….elseif…else 语句来选择若干代码块之一来执行。(可以多层 else
if,但必须有个else)

(2)使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。

对表达式(通常是变量)进行一次计算

把表达式的值与结构中 case 的值进行比较

如果存在匹配,则执行与 case 关联的代码

代码执行后,break 语句阻止代码跳入下一个 case 中继续执行

如果没有 case 为真,则使用 default 语句

(3)只要指定的条件为真,while 循环就会执行代码块。

while – 只要指定条件为真,则循环代码块

do…while – 先执行一次代码块,然后只要指定条件为真则重复循环

for – 循环代码块指定次数

foreach – 遍历数组中的每个元素并循环代码块

 

 

foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。

实例:

 

$colors = array(“red”,”green”,”blue”,”yellow”); 

 

foreach ($colors as $value) {

  echo “$value 
“;

}

?>

 

 

 

重点章节

1.PHP 函数:

页面加载时函数不会立即执行。

函数只有在被调用时才会执行。

用户定义的函数声明以关单 “function” 开头:”function”后面接的是函数名,函数调用时只需把这个函数名后面加上()跟(参数)就行

实例:

 

function writeMsg() {

  echo “Hello world!”;

}

 

writeMsg(); // 调用函数

?>

 

 

2.可以通过参数向函数传递信息。参数类似变量。

实例:

 

function familyName($fname,$year) {

  echo “$fname Zhang. Born in $year 
“;

}

 

familyName(“Li”,”1975″);

familyName(“Hong”,”1978″);

familyName(“Tao”,”1983″);

?>

 

 

3.如需使函数返回值,请使用 return 语句

实例:

 

function sum($x,$y) {

  $z=$x+$y;

  return $z;

}

 

echo “5 + 10 = ” . sum(5,10) . “
“;

echo “7 + 13 = ” . sum(7,13) . “
“;

echo “2 + 4 = ” . sum(2,4);

?>

 

 

 

4.数组:数组在单个变量中存储多个值。

数组能够在单一变量名中存储许多值,并且您能够通过引用下标号来访问某个值。

实例:

 

$cars=array(“Volvo”,”BMW”,”SAAB”);

echo “I like ” . $cars[0] . “, ” . $cars[1] . ” and ” . $cars[2] .
“.”;

?>

 

 

5. 有三种数组类型:

索引数组 – 带有数字索引的数组

关联数组 – 带有指定键的数组

多维数组 – 包含一个或多个数组的数组

 

  1. count() 函数用于返回数组的长度(元素数):

实例:

 

$cars=array(“Volvo”,”BMW”,”SAAB”);

echo count($cars);

?>

 

7. 如需遍历并输出索引数组的所有值,您可以使用 for 循环,就像这样:

实例:

 

$cars=array(“Volvo”,”BMW”,”SAAB”);

$arrlength=count($cars);

 

for($x=0;$x<$arrlength;$x++) {

  echo $cars[$x];

  echo “
“;

}

?>

 

  1. 9.关联数组是使用您分配给数组的指定键的数组。

创建一个关联:$age=array(“Peter”=>”35″,”Ben”=>”37″,”Joe”=>”43”);

实例:

 

$age=array(“Bill”=>”35″,”Steve”=>”37″,”Peter”=>”43”);

echo “Peter is ” . $age[‘Peter’] . ” years old.”;

?>

 

 

  1. 10.如需遍历并输出关联数组的所有值,您可以使用 foreach 循环,就像这样

实例:

 

$age=array(“Bill”=>”35″,”Steve”=>”37″,”Peter”=>”43”);

 

foreach($age as $x=>$x_value) {

  echo “Key=” . $x . “, Value=” . $x_value;

  echo “
“;

}

?>

 

 

11. 在本节中,我们将学习如下 PHP 数组排序函数:

sort() – 以升序对数组排序

rsort() – 以降序对数组排序

asort() – 根据值,以升序对关联数组进行排序

ksort() – 根据键,以升序对关联数组进行排序

arsort() – 根据值,以降序对关联数组进行排序

krsort() – 根据键,以降序对关联数组进行排序

 

实例:

sort()

 

$cars=array(“Volvo”,”BMW”,”SAAB”);

sort($cars);

?>

 

 

rsort()—-降序

 

$cars=array(“Volvo”,”BMW”,”SAAB”);

rsort($cars);

?>

 

 

asort()—-按值来升序

 

$age=array(“Bill”=>”35″,”Steve”=>”37″,”Peter”=>”43”);

asort($age);

?>

 

 

ksort()—–按键来升序

 

$age=array(“Bill”=>”35″,”Steve”=>”37″,”Peter”=>”43”);

ksort($age);

?>

 

 

降序类似,只是函数不一样而已。

 

12. PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global
$variable; 就可以访问它们。

这些超全局变量是:

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_FILES

$_ENV

$_COOKIE

       $_SESSION

 

13.
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。

PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

实例:

 

$x = 75; 

$y = 25;

 

function addition() { 

  $GLOBALS[‘z’] = $GLOBALS[‘x’] + $GLOBALS[‘y’]; 

}

 

addition(); 

echo $z; 

?>

 

注:含有GLOBALS关键字的变量都是超全局变量

 

14.$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。

实例:

 

echo $_SERVER[‘PHP_SELF’];

echo “
“;

echo $_SERVER[‘SERVER_NAME’];

echo “
“;

echo $_SERVER[‘HTTP_HOST’];

echo “
“;

echo $_SERVER[‘HTTP_REFERER’];

echo “
“;

echo $_SERVER[‘HTTP_USER_AGENT’];

echo “
“;

echo $_SERVER[‘SCRIPT_NAME’];

?>

 

 

此关键字的属性(参数)包含:

元素/代码

描述

$_SERVER[‘PHP_SELF’]

返回当前执行脚本的文件名。

$_SERVER[‘GATEWAY_INTERFACE’]

返回服务器使用的 CGI 规范的版本。

$_SERVER[‘SERVER_ADDR’]

返回当前运行脚本所在的服务器的 IP 地址。

$_SERVER[‘SERVER_NAME’]

返回当前运行脚本所在的服务器的主机名(比如www.w3school.com.cn)。

$_SERVER[‘SERVER_SOFTWARE’]

返回服务器标识字符串(比如 Apache/2.2.24)。

$_SERVER[‘SERVER_PROTOCOL’]

返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。

$_SERVER[‘REQUEST_METHOD’]

返回访问页面使用的请求方法(例如 POST)。

$_SERVER[‘REQUEST_TIME’]

返回请求开始时的时间戳(例如 1577687494)。

$_SERVER[‘QUERY_STRING’]

返回查询字符串,如果是通过查询字符串访问此页面。

$_SERVER[‘HTTP_ACCEPT’]

返回来自当前请求的请求头。

$_SERVER[‘HTTP_ACCEPT_CHARSET’]

返回来自当前请求的 Accept_Charset 头( 例如utf-8,ISO-8859-1)

$_SERVER[‘HTTP_HOST’]

返回来自当前请求的 Host 头。

$_SERVER[‘HTTP_REFERER’]

返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。

$_SERVER[‘HTTPS’]

是否通过安全 HTTP 协议查询脚本。

$_SERVER[‘REMOTE_ADDR’]

返回浏览当前页面的用户的 IP 地址。

$_SERVER[‘REMOTE_HOST’]

返回浏览当前页面的用户的主机名。

$_SERVER[‘REMOTE_PORT’]

返回用户机器上连接到 Web 服务器所使用的端口号。

$_SERVER[‘SCRIPT_FILENAME’]

返回当前执行脚本的绝对路径。

$_SERVER[‘SERVER_ADMIN’]

该值指明了 Apache 服务器配置文件中的SERVER_ADMIN 参数。

$_SERVER[‘SERVER_PORT’]

Web 服务器使用的端口。默认值为 “80”。

$_SERVER[‘SERVER_SIGNATURE’]

返回服务器版本和虚拟主机名。

$_SERVER[‘PATH_TRANSLATED’]

当前脚本所在文件系统(非文档根目录)的基本路径。

$_SERVER[‘SCRIPT_NAME’]

返回当前脚本的路径。

$_SERVER[‘SCRIPT_URI’]

返回当前页面的 URI。

 

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

使用超级全局变量 $_REQUEST 来收集 input 字段的值

实例:

Name: 

$name = $_REQUEST[‘fname’]; 

echo $name; 

?>

 

 

 

 

 

 

  1. PHP
    $_POST 广泛用于收集提交 method=”post” 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。

实例:

 

Name: 

 

$name = $_POST[‘fname’]; 

echo $name; 

?>

 

  1. PHP
    $_GET 也可用于收集提交 HTML 表单 (method=”get”) 之后的表单数据。

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

参数传值

实例:

 

 

测试 $GET

 

 

通过URL传递,获取上个页面传过来的subject和web值

 

echo “Study ” . $_GET[‘subject’] . ” at ” . $_GET[‘web’];

?>

 

Approved

现在你想显示在表中所有的已创建但没有被认可的链接,这个编辑的页面应可以更正一些输入时的错误,并用适当的单选按钮来为每一个记录设置是否允许(Approved),然后一次把更新后的记录都提交到表中。

首先,当你从数据库出提取所有的记录并显示出来时,你必须为每一个记录设置一个唯一的名字,这将让我们在提交时可以循环地辩别出各个记录的值。代码如下:

?php//初始化变量的记数器$index = 0;$index_count = 0;echo form method=post action=$PHP_SELFn;echo tablen;echo trtdbPosted By/b/tdtdbLink/b/td.tdbDescription/b/tdtdbApproved/b/td/trn;/*********假定我们已从数据库中检索出记录到一个数组中 $myrow = mysql_fetch_array().下面的 do...while 循环根据名字为每一个$xstr变量分配了一个值并且连接了$index 的值到结尾,以0为开始。这样,这个循环的第一次时,$SubmissionIDStr 的值就是 SubmissionID0 ,第二次就是 SubmissionID1 ,以此类推。***********/do {$SubmissionIDStr = SubmissionID.$index;$PostedByStr = PostedBy.$index;$LinkStr = Link.$index;$DescriptionStr = Description.$index;$ApprovedStr = Aprroved.$index;//这一段将在屏幕上显示值,以每行一条记录。printf(trtdinput type=hidden name=%s value=%sinput type=text name=%s value=%s/tdtdinput type=text name=%s value=%s/tdtdinput type=text name=%s value=%s/tdtdinput type=radio name=%s value=-1Yesinput type=radio name=%s value=0 checkedNo/td/trn,$SubmissionIDStr, $myrow[SubmissionID], $PostedByStr, $myrow[PostedBy], $LinkStr, $myrow[Link],$DescriptionStr, $myrow[Description], $ApprovedStr, $ApprovedStr);//每个循环记数器加1$index++;$index_count++;} while ($myrow = mysql_fetch_array($result));// 创建一个索引记数器index_count来跟踪所有的记录数echo INPUT TYPE=hidden NAME=counter VALUE=$index_countn;echo INPUT TYPE=submit/formn;?

提交以后,我们利用$index_count变量再一次循环遍历页面上所有的变量,然后,分配这些变量给另一些变量,这就用到了变量的变量。

?php//这个循环遍历所有页面上显示的记录for ($index = 0; $index = $counter; $index++) {/*****

这部分用我们在前面创建的名字设置了新的变量

从0开始,直到$index_count

*****/$varSubmissionID = SubmissionID.$index;$varPostedBy = PostedBy.$index;$varLink = Link.$index;$varDescription = Description.$index;$varApproved = Approved.$index;/******

这是变量的变量部分,把每个值分配给每个新变量的名。

例如,第一次循环时,分配给记录 SubmissionID0
是从前面得来的值,我们用变量的变量来了取到它。

*******/$SubmissionIDvalue = $$varSubmissionID;$PostedByvalue = $$varPostedBy;$Linkvalue = $$varLink;$Descriptionvalue = $$varDescription;$Approvedvalue = $$varApproved;//更新数据库$sql = UPDATE submissions SET PostedBy=$PostedByvalue,Link=$Linkvalue,.Description=$Descriptionvalue WHERE SubmissionID=$SubmissionIDvalue;$result = mysql_query($sql);//如果本记录被设置为approved,更新相应的字段 Approved。if ($Approvedvalue == -1) {$sql = UPDATE submissions SET Approved=-1 WHERE SubmissionID=$SubmissionIDvalue;$result = mysql_query($sql);}}?

我希望这有助于你明白这个变量的变量的基本用法,并且在你将来的工作中使用它们提供一些思路。变量的变量这一概念,最初也是让我头痛的东西,但是一旦你知道了它们工作的基本原理时,它们就变成了一块美味的比萨饼。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图