PHP1_PHP语法快速上手

声明PHP脚本的方式

最常用

短标记风格,需要在 php.ini 配置文件内 将 short_open_tag 设置为 ON ,然后重启

<% %> ASP风格, 需要在 php.ini 配置文件内 将 asp_tag 设置为 ON ,然后重启

: 脚本风格,基本用不到

: 嵌入表达式

嵌入HTML

PHP和JSP类似,可以和HTML嵌套使用


    
    
        
        <?php echo '标题';?>
    
    
    
    >
    
        
        大家好,我的名字是 
        
我的年龄是: = 18) {?>

我成年了

我未成年

= 18) :?>

我可以去网吧

我还不能去网吧

PHP1_PHP语法快速上手_第1张图片

PHP Web 的本质

其实 php 响应请求,就是一个输出IO流的过程; PHP解析器会将.php文件的内容解析执行后,将结果返回给客户端;
如下示例


    

        
        <?php echo '标题';?>

将会被解析成如下php代码

echo '';
// 定义变量
$name = "张三";
$age = 18;
echo '';
//嵌入PHP代码
echo '';
echo '标题';
echo '';
echo '';

执行后,将结果返回给客户端

标题

所以.PHP可以和任何文本嵌套,本质就是 echo 输出

结尾空行的问题

在开发中会遇到尾行后换行的问题,如下代码,我们长时间的开发习惯,会在尾行多输出几个空行;


## 下面是开发习惯多出来的空行

会被解析成为如下代码
echo 'test';
echo 'n';
echo 'n';

如果客户端是严格解析,(如:JSON),客户端则会产生解析错误.

所以,开发中要注意到这一点,在 ?> php文件结尾后,不要有多余的空行。

如果 一个 .php 文件中,全部都是 php代码,没有其他的文本,则可以忽略 ?> ,这样就不用担心结尾换行的习惯问题了;

# demo: exception.php

 ,下面的换行没事,不会被PHP解析 */


总结:
?> 结尾后的空白行 会被当做空字符串输出到客户端,可能导致客户端解析出现莫名其妙的错误。
所以,当客户端对空白字符串(空白行)敏感的时候(如API返回JSON的场景时),就应该注意空白行的问题。

或可以直接忽略结尾,忽略结尾的前提是 该PHP文件只有PHP的代码,不会和其他模板(HTML等)混合嵌套编程。

注释

# 行注释
/*多行注释*/
// 行注释

变量

PHP的变量名区分大小写,多个变量大小写不一样为不同的变量;

变量可以改变类型,和javascript等其他脚本语言类似;

$foo = 'Bob';              
echo $foo;      // 输出: Bob
$foo = 13 ;
echo $foo;      // 输出: 13
$foo = new stdClass();
var_dump($foo);

默认值

虽然在 PHP 中并不强制需要先使用前,声明和初始化变量,但对变量进行初始化是个好习惯。

未初始化的变量具有其类型的默认值,下面列出每个类型的默认值:

Boolean: 默认值是 FALSE
整形和浮点型: 默认值是0
字符串型:默认值是 空字符串
数组变量 : 默认值是空数组
对象变量: 默认值是 new stdClass

// 输出NULL,没有被用作任何地方,无法推断出类型,所以为NULL
var_dump($unset_var);

// $unset_bool 变量在下面的表达式中被用作 Boolean ,所以PHP推断其为 Boolean 类型,但由于它没有声明和初始化,所以采用其默认值 FLASE
// 输出false
echo($unset_bool ? "true\n" : "false\n");

// $unset_str 变量在下面的表达式中被用作 String ,所以PHP推断其为 String 类型,但由于它没有声明和初始化,所以采用其默认值 空字符串
// 输出 abc
$unset_str .= 'abc';
var_dump($unset_str);

// $unset_int 变量在下面的表达式中被用作 int ,所以PHP推断其为 int 类型,但由于它没有声明和初始化,所以采用其默认值 0
// 输出 25
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);

// $unset_int 变量在下面的表达式中被用作 float ,所以PHP推断其为 float 类型,但由于它没有声明和初始化,所以采用其默认值 0
// 输出 1.25
$unset_float += 1.25;
var_dump($unset_float);

// $unset_arr 变量在下面的表达式中被用作 Array ,所以PHP推断其为 Array 类型,但由于它没有声明和初始化,所以采用其默认值 空数组
$unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// $unset_obj 变量在下面的表达式中被用作 object ,所以PHP推断其为 object 类型,但由于它没有声明和初始化,所以采用其默认值 new stdClass
$unset_obj->foo = 'bar';
var_dump($unset_obj);  // 输出 object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }

建议一定要在变量使用前进行声明与初始化,使用未声明初始化的变量在较新的PHP版本会产生 **Notice** 通知

isset

isset() 检测变量是否声明,并且不是 NULL。

如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。

字符("\0")并不等同于 PHP 的 NULL

如果一次传入多个参数,那么 isset() 会根据根据参数,从左到右依次 isset(),全部都是 isset()则返回TRUE,如果发现非 isset() 则返回FALSE。

unset

清除释放一个变量;

// 销毁单个变量  
unset ($foo);  
  
// 销毁单个数组元素  
unset ($bar['quux']);  
  
// 销毁一个以上的变量  
unset($foo1, $foo2, $foo3);

可变变量

可变变量名的作用: 动态的拼凑变量名,引用该变量;

简单的案例:

$abc = "abcdefg";
$one = "abc";
$abcdefg = "final";

echo  $$one;  // $one => 'abc' ;  $$one = $abc = "abcdefg"
echo  $$$one;  // $one => 'abc' ;  $$one ="abcdefg" ; $$$one = $abcdefg = 'final'

复杂的案例:
和数组、对象一起使用

class foo {
    var $bar = 'I am bar.';

    var $r   = 'I am r.';
}

$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";     // $foo -> $bar => $foo->bar => I am bar .
echo $foo->$baz[1] . "\n";  // $foo -> $baz[1] => $foo->bar => I am bar .

$start = 'b';
$end   = 'ar';
echo $foo->{$start . $end} . "\n";// => $foo->bar => I am bar .

$arr = 'arr';
echo $foo->$arr[1] . "\n"; // => $foo->r => I am r .
echo $foo->{$arr}[1] . "\n"; // => ($foo->arr)[1] => I am B .

要将可变变量用于数组,必须解决一个模棱两可的问题。

这就是当写下 $$a[1] 时,
是想要 $a[1] 作为一个变量呢,
还是想要 $$a 作为一个变量,然后取出该变量中索引为 [1] 的值。

解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]

$A = "zhangsan";

$arr = array('A', 'I am B.', 'I am C.');
echo ${$arr[0]};  // => $A => 输出 zhangsan

$name= 'arr';
echo ${$name}[0]; // => $arr[0] => 输出 A

变量的使用范围

超全局变量

静态变量

常量

const 和 define 的区别

魔术常量

类型转换

引用

变量相关函数

file:///E:/php-chunked-xhtml/ref.var.html

你可能感兴趣的:(php)