PHP快速教程

注释

和C/C++一样

单行注释://

多行注释:/**/

变量

和C/C++一样。然而,在PHP中必须将 $ 符号放在所有变量之前。这使得PHP语言解析速度更快,因为解析器只要碰见这个符号就会立即知道接下来的是一个变量。《Learning PHP MySQL & JavaScript, 4th Edition》书中,对变量,数组,二维数组做了个很好的比喻,把变量名想象成小抽屉,变量值想象成抽屉里面的内容。

字符串

$username = "Fred Smith";

数组

$team = array('Bill', 'Mary', 'Mike', 'Chris', 'Anne');

 

二维数组

$oxo = array(array('x', ' ', 'o'),
array('o', 'o', 'x'),
array('x', 'o', ' '));

值传递 VS 引用传递

PHP习惯于在变量之前加上&符号来告诉解析器传一个引用给变量,而不是变量的值。值传递相当于把抽屉里面的字条内容抄写一份,然后原纸条放回盒子。引用传递相当于在盒子中字条上栓上一根线,调用者顺着这条线能把纸条扯出来。

PHP中,对象间赋值就是引用传递,因此一个对象属性的改变也会反映在另一个对象身上,为了解决这个问题,PHP使用clone方法

<?php
  $object1 = new User();
  $object1->name = "Alice";
  $object2 = clone $object1;
  $object2->name = "Amy";

  echo "object1 name = " . $object1->name . "<br>";
  echo "object2 name = " . $object2->name;
  
  class User
  {
    public $name;
  }
?>
View Code

预定义变量

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

$GLOBALS

$_SERVER

$_GET

$_POST

$_FILES

$_COOKIE

$_SESSION

$_REQUEST

$_ENV

在使用超级全局变量之前要小心,因为它们经常被黑客用来作为寻找入侵你网站的突破口。黑客们使用恶意代码加载$POST,$GET或其他超级全局变量,例如,如果你随意地访问了UNIX或MYSQL之类的命令,就可能损坏或显示敏感数据。所以,在使用超级全局变量之前总要对它们进行清洁处理。有一种处理方法是运用PHP的htmlentities函数。它将所有字符转变为HTML实体。例如,小于和大于字符(<和))被转换成字符串&1t;和&gt;以便安全提交,因为这些内容都是一些引号和反斜杠等。所以,一个访问$SERVER更好的方法是:

$came_from = htmlentities($_SERVER['HTTP_REFERER']);

多行文本

方法一:使用引号

<?php
    $author = "Steve Ballmer";

    echo "Developers, Developers, developers, developers, developers,
    developers, developers, developers, developers!

    - $author.";

    $text = "Measuring programming progress by lines of code is like
    Measuring aircraft building progress by weight.

    - $author.";
?>

方法二:deredoc

这种做法和Linux cat命令的heredoc用法一样

<?php
  $author = "Brian W. Kernighan";

  echo <<<_END
  Debugging is twice as hard as writing the code in the first place.
  Therefore, if you write the code as cleverly as possible, you are,
  by definition, not smart enough to debug it.
  
  - $author.
_END;
?>

常量

define

define函数一般用于创建全局常量

define("ROOT_LOCATION", "/usr/local/www/");

const

const一般用于定义类内部的常量

<?php
  Translate::lookup();
  
  class Translate
  {
    const ENGLISH = 0;
    const SPANISH = 1;
    const FRENCH  = 2;
    const GERMAN  = 3;

    static function lookup()
    {
      echo self::SPANISH;
    }
  }
?>

无论const还是define,使用常量时都不可以加 $

预定义常量

作用域

与C/C++一样,也有local、global、static的说法。

  • 局部变量只能在它们被定义的范围内访问。如果它们在函数外,可以被函数、类等以外的所有代码访问。如果变量位于函数内,只有函数可以访问该变量,并且它的值在函数返回时被释放。
  • 全局变量可以在任何地方访问。
  • 静态变量只能够在定义它们的函数内被访问,但是在多次调用时保持它们的值。

流程控制

与C/C++用法一直,《Learning PHP MySQL & JavaScript, 4th Edition》书中有几幅图形象描述了流程控制逻辑

if

if else

if elif else

各种循环

foreach...as

使用foreach...as循环遍历数值数组

<?php
  $paper = array("Copier", "Inkjet", "Laser", "Photo");
  $j = 0;

  foreach($paper as $item)
  {
    echo "$j: $item<br>";
    ++$j;
  }
?>

使用foreach...as循环遍历关联数组

<?php
  $paper = array('copier' => "Copier & Multipurpose",
                 'inkjet' => "Inkjet Printer",
                 'laser'  => "Laser Printer",
                 'photo'  => "Photographic Paper");

  foreach($paper as $item => $description)
    echo "$item: $description<br>";
?>

引入外部文件

与C/C++中包含头文件类似,PHP也有include关键字,与C/C++稍有区别。首先PHP的include没有防卫式声明,这意味着项目规模变大时,可能会重复引入相同文件。这会产生错误信息,因为在试图多次定义同名的常量或函数。PHP为解决这个问题使用include_once。解决了重复包含问题,include系列还有个问题,就是他只会试图导入文件,找不到也没关系,不会报错继续执行。解决这个问题,PHP使用require,与include一样,也有个require_once

public,protected,private

与C++一样,也有public,protected,private。类内部属性默认情况下是public,C++默认是private。

  • 当外部代码需要访问这个成员,派生类要继承时,使用public。
  • 当外部代码不能访问这个成员,而派生类可以继承时,使用protected。
  • 当外部代码不能够访问这个成员,派生类也不能够继承时,使用private。

extends

extends操作符表明一个类继承自另一个类

parent、final

C++中类继承时存在同名隐藏问题,即子类方法会隐藏父类同名方法。PHP也有这个问题,解决之道是调用父类方法时显式加上parent关键字

如果父类方法被声明为final的,则子类不能隐藏父类同名方法

 

转载于:https://www.cnblogs.com/kelamoyujuzhen/p/10317140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值