PHP 中变量 常量的定义与用法

 更新时间:2016年11月25日 15:51  点击:1830

变量用于存储值,比如数字、文本字符串或数组。

一旦设置了某个变量,我们就可以在脚本中重复地使用它。

PHP 中的所有变量都是以 $ 符号开始的。

在 PHP 中设置变量的正确方法是:

$var_name = value;PHP 的入门者往往会忘记在变量的前面的 $ 符号。如果那样做的话,变量将是无效的。

让我们试着创建一个存有字符串的变量,和一个存有数值的变量:


如果对于变量和常量的定义,你会注意几个方面呢?你可能会想到:

如何定义变量,它和C# 等语言有什么不同呢?
变量区分大小写吗?
PHP的变量还有其他重要的吗?

常量和变量的定义一样吗?
 分别讲述吧。
1.如何定义变量,它和C# 等语言有什么不同呢?
   PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。例如:
<?php教程
 $var='Jim';
  $VAR='Kimi;
  echo "$var,$VAR";//输出“Jim,Kimi"
 ?>你可能还关心变量的命名,其实和大多数语言一样。
2. 变量区分大小写吗?
   如 1里说的,区分大小写。
  注意,需要说明的一点是自PHP4以来,引入了引用赋值的概念,其实和多数语言的引用类似,不过我觉得最类似的是C/C++.因为它也用到了"&"符号。例如:  1 <?php
2 $foo = 'Bob';              // 赋值'Bob'给foo
3 $bar = &$foo;              // 通过$bar引用.注意&符号
4 $bar = "My name is $bar";  // 修改 $bar
5 echo $bar;
6 echo $foo;                // $foo 也修改了.
7 ?> 和其他语言一样,只能对有变量名的变量才可以引用。
3. PHP其他重要点
预定义变量
预定义变量在PHP是一个重要的概念。 PHP 提供了大量的预定义变量。由于许多这些变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在 PHP 以命令行形式运行时并不生效。

需要注意的是 在PHP 4.2.0 以及后续版本中,PHP 指令 register_globals 的默认值为 off。这是 PHP 的一个主要变化。让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。例如,为了得到 DOCUMENT_ROOT 的值,将必须使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 来代替 $id 从 URL http://www.example.com/test.php?id=3 中获取 id 值,亦或使用 $_ENV['HOME'] 来代替 $HOME 获取环境变量 HOME 的值。

从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。(PHP 中没有用户自定义超全局变量的机制。)超全局变量罗列于下文中;而且,你也将注意到旧的预定义数组($HTTP_*_VARS)仍旧存在。自 PHP 5.0.0 起,长格式的 PHP 预定义变量可以通过设置 register_long_arrays 来屏蔽。
下表是PHP的超全局变量:
超全局变量
 描述
 
$GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键名为全局变量的名称。从 PHP 3 开始存在 $GLOBALS 数组。
$_SERVER 变量由 web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 $HTTP_SERVER_VARS 数组(依然有效,但反对使用)。
$_GET 经由 URL 请求提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组(依然有效,但反对使用)。
$_POST 经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS 数组(依然有效,但反对使用)。
$_COOKIE 经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。
$_FILES 经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)
$_ENV 执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。
$_REQUEST  经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order 配置指示来定义。此数组在 PHP 4.1.0 之前没有直接对应的版本。参见 import_request_variables()。
$_SESSION 当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用)
变量的应用范围
 每个变量都有应用范围,那么PHP是怎么定义的呢?还是先看看下面代码吧:
 1 <?php
 2  $var=0;
 3  function test($index)
 4  {
 5      $var=$var+1;
 6      echo "The ".$index." number is ".$var."<br>";
 7  }
 8  test(1);
 9  test(2)
10 ?>你认为以上的代码会显示什么结果呢?
如果你认为是下面:
结果1:
The 1 number is 1
The 2 number is 2不好意思,你的结果是错误的。
其实正确的结果应该是:
结果2
The 1 number is 1
The 2 number is 1那么你从其中发现了什么呢?我们可以知道虽然第2行的代码定义在外面,但第5行的变量和它是不一样的。第5行的变量仅在这个函数里使用。进一步的,如果我想调用第一行的变量而显示结果2.代码可以如下:
 1 <?php
 2  $var=0;
 3  function test($index)
 4  {
 5      global $var;
 6      $var=$var+1;
 7      echo "The ".$index." number is ".$var."<br>";
 8  }
 9  test(1);
10  test(2)
11 ?>这个代码段和上面的代码段有何区别呢?注意第5行,多了一个global关键字。明白了吧。
那么还有没有其他方法呢?答案是肯定的。
代码如下:
 1 <?php
 2  $var=0;
 3  function test($index)
 4  {
 5     
 6      $GLOBALS["var"]=$GLOBALS["var"]+1;
 7      echo "The ".$index." number is ".$GLOBALS["var"]."<br>";
 8  }
 9  test(1);
10  test(2)
11 ?>代码有什么特殊的吗?那就是用到了$GLOBALS这个超全局变量。
PHP也有静态变量的说法。不过静态变量一般用在函数里,只能是局部变量了。看看下面代码吧:
 1 <?php
 2 function Test()
 3 {
 4    static $a = 0;
 5    echo $a."<br>";
 6    $a++;
 7 }
 8 Test();
 9 Test();
10 ?> 结果为
1
2
PHP还有一个相当令人兴奋的特性:可变变量
所谓可变变量,就是一个变量的变量名可以动态的设置和使用。
看看下面的例子:
1 <?php
2  $a="hello";
3  $hello="world";
4  echo $a." ".$$a;
5 ?> 输出的结果居然是hello,world.太神奇了。$$a其实就是$hello,因为$a的值是hello。
变量就这多了。下面看看常量。

常量
 PHP的常量是不是前面加const呢?让我们看一看。
不是的。在PHP必须用下面的方式定义。
bool define ( string name, mixed value [, bool case_insensitive] )
name 为常量名,value为常量的值。case_insensitive]为大小写敏感。默认为敏感。例如:
 1 <?php
 2 define("CONSTANT", "Hello world.");
 3 echo CONSTANT; // outputs "Hello world."
 4 echo Constant; // outputs "Constant" and issues a notice.
 5
 6 define("GREETING", "Hello you.", true);
 7 echo GREETING; // outputs "Hello you."
 8 echo Greeting; // outputs "Hello you."
 9
10 ?>

常量和变量不同:

常量前面没有美元符号($);

常量只能用 define() 函数定义,而不能通过赋值语句;

常量可以不用理会变量范围的规则而在任何地方定义和访问;

常量一旦定义就不能被重新定义或者取消定义;

常量的值只能是标量。

实例

<?php
$txt = "Hello World!";
$number = 16;
?>PHP 是一门松散类型的语言(Loosely Typed Language)
在 PHP 中,不需要在设置变量之前声明该变量。

在上面的例子中,您看到了,不必向 PHP 声明该变量的数据类型。

根据变量被设置的方式,PHP 会自动地把变量转换为正确的数据类型。

在强类型的编程语言中,您必须在使用前声明变量的类型和名称。

在 PHP 中,变量会在使用时被自动声明。


<?php
 //引用
 $one="test";
 two=&amp;$one;//相当于传地址,两个变量指向一个地址

//动态变量
$one="######";
$two="one";
$three="two";

echo $three."&lt;br&gt;";//输出"two"
echo $$three."&lt;br&gt;";//输出"one"
echo $$$three."&lt;br&gt;";//输出"######"

//php中有8个类型
//4种标量:   int integer
//     bool boolean
//     float,double,real
//     string
//2种复合类型: array
//  object
//2种特殊类型:  资源类型 resource
//   空类型   null

  
//整数的声明  
$int=10; //十进制声明
$int=045;//八进制声明
$int=0xff;//十六进制声明
$float=3.14E+5;//科学计数法
$float=3.14E-5;

//一下都是false的情况
$bool=false;
$bool=0;
$bool=0.000;
$bool=null;
$bool="";
$bool=" ";
$bool="0";
$bool=array();

//字符串的声明
//1.单引号和双引号都可以声明字符串
//2.声明的字符串没有长度限制
//3.在双引号的字符串中,既可以直接解析变量,又可以直接使用转义字符(可以转义单引号本身,也可以转义转义字符"")
//4.在单引号的字符串中,不可以直接解析变量,也不可以使用转义字符
//5.在双引号中不能再使用双引号,在单引号中不能再使用单引号
//6.最好使用单引号,
$str='aaaaa';
$str="aaaa";
//定界符声明字符串,大量字符串
//test是自定义的一个字符串,后面不能有任何字符,空格也不可以
//也要以test这个自定义的字符串结束,结束前不能有任何字符
$str=&lt;&lt;&lt;test
this write content......
test;
?>

php教程 分支结构 条件结构 选择结构

<?php
/*
 *    流程控制
 *   
 *     一、顺序结构
 *     二、分支结构--条件结构--选择结构
 *       1.单路分支
 *  //条件bool,true或false,> < == !- & || !
 *  if(条件)
 *   执行下面一条语句
 *  if(条件)
 *  {
 *   代码段;
 *   代码段;
 *  }
 *
 *       2.双路分支
 *          使用else从句
 *
 *      if(条件)
 *       执行一条语句
 *      else
 *       执行一条语句
 *      if(条件){
 *        一条或多条代码
 *      }else{
 *        一条或多条代码
 *      }
 *      
 *       3.多路分支
 *  可以使用 if  else if   和 switch case
 *  //这是一种互斥的关系
 *  if(条件){
 *
 *  }else if(条件){
 *  }else if(条件){
 *  }else{
 *  }
 *       4.嵌套分支
 *  if(){
 *   if(){
 *   }else{
 *    if(){}
 *   }
 *   }
 * 三、循环结构
 *  
 * 
 *
 *
 *
 * 总结:
 *  如果是判断一段范围 则使用elseif
 *  如果是单个匹配,则使用switch case
 */
 //单路执行
 $a=10;
 $b=5;
 if($a > $b)
  echo "$a 是大于 $b 的";

 //双路执行
 $a=10;
 $b=20;
 if($a>$b)
 {
  echo "$a 大于 $b</br>";
 }
 else
 {
  echo "$a 小于 $b</br>";
 }

 //多路执行
 $hour=date("H");
 if($hour > 6 && $hour < 9)
 {
  echo "good morning!":
 }
 else if($hour > 9 && $hour < 12)
 {
  echo "上午好";
 }
 else if($hour > 12 && $hour < 14)
 {
  echo "中午好";
 }
 else if($hour > 14 && $hour < 17)
 {
  echo "下午好";
 }
 else if($hour > 17 && $hour < 19)
 {
  echo "傍晚好";
 }
 else if($hour > 19 && $hour <22)
 {
  echo "晚上好";
 }
 else
 {
  echo "夜晚好";
 }
 //根据互斥性改良代码
 $hour=date("H");
 if($hour < 9)
 {
  echo "good morning!":
 }
 else if($hour < 12)
 {
  echo "上午好";
 }
 else if($hour < 14)
 {
  echo  case " Mon":
  echo "星期一";
  break;"中午好";
 }
 else if($hour < 17)
 {
  echo "下午好";
 }
 else if($hour > 19)
 {
  echo "傍晚好";
 }
 else if($hour < 22)
 {
  echo "晚上好";
 }
 else
 {
  echo "夜晚好";
 }

 //判断当天星期
 $week=date("D");//获取星期几
 switch($week) //switch(变量)  变量只用整型和字符串
 {
 case "Mon":
  echo "星期一";
  break;
 case "Tue"
  echo "星期二";
  break;
 case "Wed":
  echo "星期三";
  break;
 case "Thu":
  echo "星期四";
  break;
 case "Fri":
  echo "星期五";
  break;
 default:
  echo "周末";
 }

 //嵌套类
 $sex=$_GET["sex"];
 $age=$_GET["age"];
 if($sex=="nan")
 {
  if($age >= 60)
  {
   echo "这个$sex 已经退休".($age-60)."年了";
  }
  else
  {
   echo "这个男士还在工作,还有".(60-$age)."年才退休";
  }
 }
 else
 {
  if($age >= 66)
  {
   echo "这个$sex 已经退休".($age-66)."年了";
  }
  else
  {
   echo "这个女士还在工作,还有".(66-$age)."年才退休";
  }
 }
?>

php教程循环语句for while do while的用法
<?php
循环结构
 一、while循环
 while(表达式)
{
 循环体;//反复执行,直到表达式为假
}

<?php
$num = 1;

while ($num <= 10){
    print "Number is $num<br />";
    $num++;
}

print 'Done.';
?>

Do While 循环语句与while有一定的区别,它们的区别就是do while不管条件是否为真都会先执行一下,而while必须为真才会执行一次.

do {
echo "Mmmmm...I love cookies! *munch munch munch*";
} while ($cookies > 1);

输出就是.

Mmmmm...I love cookies! *munch munch munch


三、for循环

 根据循环条件不同,有两种类型的循环

一种:计数循环 (一般使用for)
另一种:条件型循环 (一般使用 while   do-while)

for (expr1; expr2; expr3) {
  statement
}

其中的 expr1 为条件的初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。

下例是用 for 循环写的 "以后不敢了" 的例子,可以拿来和用 while 循环的比较。

<?php
for ($i=1; $i<=10; $i++) {
  echo "$i. 以后不敢了<br>n";
}
?>


输出表格

<HEAD>
  <TITLE>Value of Shares</TITLE>
  <H3>Table Showing Cost of Shares</H3>
  <BODY>
  <TABLE BORDER=1>
  <?php
  for ($shares = 1; $shares <= 20; $shares++){
     $cost = $shares * 20;
     echo "<TR><TD>The cost of $shares share/s is $cost #x0024s</TD>","n";
     $dividend = $cost * 0.10;
     echo "<TD>The dividend is $dividend #x0024s</TD></TR>  " ,"n";
  }
  ?>
  </TABLE>
  </BODY>
  </HTML>


累加计算
 

<?php
   $count = 1;
   while ($count < 5) {
      echo "$count squared = ".pow($count,2). "<br />";
       $count++;
   }
?>


do while 循环

<html>
<head>
<title>The do...while Statement</title>
</head>
<body>
<div>
<?php
    $num = 1;
    do {
      print "Execution number: $num<br />n";
      $num++;
    } while ( $num > 200 && $num < 400 );
?>
</div>
</body>
</html>

下们用到了php教程的了ereg函数来验证电子邮箱地址,用户名,url地址实例了。

把url拆分

<?
$url = "http://www.111cn.net";

$www_url = ereg("^(http://www).([[:alnum:]]+).([[:alnum:]]+)", $url, $regs);

if ($www_url) :        
     echo $regs[0];    
     print "<br>";
     echo $regs[1];    
     print "<br>";
     echo $regs[2];    
     print "<br>";
     echo $regs[3];    
endif;
?>


 
邮箱地址

<?php

    $s = 'm@t.ca';

    if (ereg ('([[:alpha:]]+)@([[:alpha:]]+).([[:alpha:]]{2,4})', $s, $matches))
    {
      echo "Regular expression successful. Dumping matchesn";
      var_dump ($matches);
    }
    else
    {
      echo "Regular expression unsuccessful.n";
    }

?>


 

邮箱地址二

<?
        $email="a@a.com";
        $is_com = ereg("(.)(com$)", $email);
        print $is_com;
?>

用户名验证

<?php
   $username = "Test";
   if (ereg("([^a-z])",$username)) echo "Username must be all lowercase!";
?>

php教程 全角半角正则表达式代码

//$keyword='破坏';//当值为破坏时可以加上超连接
$keyword='真皮层';//当值为直皮层时则不能匹配加上招连接

$url='www.111cn.net;

$content='激光光束透过表皮和真皮层,破坏色素细胞和色素颗粒';

$content = preg_replace( '|(?<=[^&])('.$keyword.')(?=[^&])|i', '<a href="'.$url.'">$1</a>', $content, 1);

//$content = preg_replace( '|(?<=[^&])('.$keyword.')([^&])|i', '<a href="'.$url.'">$1</a>$2', $content, 1); //这样也无法匹配
//有朋友遇到过这样的情况吗?应该如何解决呢?我试过了但凡能试的正则修正符,都没有用。

 

<?php

$keyword='破坏';//当值为破坏时可以加上超连接

$keyword2='真皮层';/

/当值为直皮层时则不能匹配加上招连接

$url='www.111cn.net';$content='激光光束透过表皮和<a href="http://www.111cn.net">真皮层</a>,破坏色素细胞和色素颗粒';


$a=preg_replace('/<a(.*)>'.$keyword2.'</a>/i',''.$keyword2.'',$content);

echo str_replace($keyword,'<a href="'.$url.'">'.$keyword.'</a>',$a);
?>

 

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • 解决vue的router组件component在import时不能使用变量问题

    这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • Vue select 绑定动态变量的实例讲解

    这篇文章主要介绍了Vue select 绑定动态变量的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-23
  • 深入理解PHP变量的值类型和引用类型

    在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型,在使用的时候,需要注意这一点。看到网友在讨论PHP的&符号,要彻底理解它的用法,就有必要讨论一下变量的两种形式。PHP的变量在内存中是这样...2015-10-23
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
  • 详解ES6实现类的私有变量的几种写法

    这篇文章主要介绍了详解ES6实现类的私有变量的几种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • C#不同类型的成员变量(字段)的默认值介绍

    虽然C#编译器为每个类型都设置了默认类型,但作为面向对象的设计原则,我们还是需要对变量进行正确的初始化。实际上这也是C#推荐的做法...2020-06-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • python 实现循环定义、赋值多个变量的操作

    这篇文章主要介绍了python 实现循环定义、赋值多个变量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25