zoukankan      html  css  js  c++  java
  • PHP学习笔记之二

    1. 数组

    PHP的数组其实是一个关联数组,或者说是哈希表。PHP不需要预先声明数组的大小,可以用直接赋值的方式来创建数组。例如:

    //最传统,用数字做键,赋值

    $state[0]="Beijing";
    $state[1]="Hebei";
    $state[2]="Tianjin";

    //如果键是递增的数字,则可以省略

    $city[]="Shanghai";
    $city[]="Tianjin";
    $city[]="Guangzhou";

    //用字符串做键

    $capital["China"]="Beijing";
    $capital["Japan"]="Tokyo";

    用array()来创建数组会更加方便一点,可以将数组元素作为array的参数传递给他,也可以用=>运算符创建关联数组。例如:

    $p=array(1,3,5,7);

    $capital=array(“China”=>”Beijing”, “Japan=>”Tokyo”);

    array其实是一种语法结构,而不是函数。和array类似,还有一个list(),它可以用来提取数组中的值,并给多个变量赋值。例如:

    list($s,$t)=$city;
    echo $s,' ',$t;

    输出结果:Shanghai Tianjin

    注意,list方法只能用于由数字索引的数组。

    PHP内建了一些常用的数组处理函数,具体可以参考手册。常用的函数举例如下,count或者sizeof可以得到数组的长度,array_merge 可以合并两个,或者多个数组,array_push(pop)可以像堆栈一样使用数组。

     <?php
             $state[0]="Beijing";
             $state[1]="Hebei";
             $state[2]="Tianjin";
    
             $city[]="Shanghai";
             $city[]="Tianjin";
             $city[]="Guangzhou";
    
             $capital["China"]="Beijing";
             $capital["Japan"]="Tokyo";
             
             echo count($city),'<br/>';
              array_push($capital,"Paris");
             $newarray=array_merge($city,$capital);
             foreach($newarray as $elem)
                 echo $elem.’<br/>’;
        
     ?>

    输出结果为:

    3
    Shanghai
    Tianjin
    Guangzhou
    Beijing
    Tokyo
    Paris

    2. 类和对象

    PHP5开始对面向对象编程有了很好的支持。PHP中的类的概念和其他面向对象的语言比如C#是十分相似的,它也是一个值和方法的聚合体,使用class关键字定义。例如:

      <?php
    
            class AuthUser {
                protected $userName;
                protected $password;
                public function   __construct($userName,$password) {
                    $this->userName=$userName;
                    $this->password=$password;
                }
    
                public function GetUserName() {
                    return $userName;
                }
    
                public function ChangePassword($old,$new) {                
                    if($this->password==$old) {
                        $this->password=$new;
                        return true;
                    }else
                        return false;
                }
    
                public function Login($password) {
                    return $this->password==$password;
                }
    
                public static function CreateUser($userName,$password) {
                    $user=new AuthUser($userName,$password);
                    return $user;
                }
    
            }
            $user=AuthUser::CreateUser("Admin","123");
    
            echo $user->GetUserName();
            if($user->ChangePassword('abc', 'new'))
                echo 'ChangePassword success';
            else
                echo 'Change Password fail';
            $user->ChangePassword("123", "321");
            if($user->Login("321"))
                echo "Login";
            else
                echo "Login fail";
            ?>

    上面是一个虽然没有什么用但是语法结构上较为完整的类。首先使用class关键字定义类的名字,内部可以定义字段和方法。字段和方法的修饰词可以是private,protected,public 和 final(仅方法有)。其含义和其它语言一致。不再赘述。不同的地方在于,PHP不支持函数的重载。另外,PHP5的构造函数的定义是__construct,注意前缀是两个下划线。PHP4的构造函数的定义和其它语言一致,是和类名一样的函数,PHP5也兼容这种写法。PHP5还支持析构函数,名字是__destruct。在函数内部,可以使用$this变量来获得当前对象的引用。 PHP也支持静态函数,同样是使用static关键字修饰。示例中最后一个函数就静态函数。静态函数不能通过类的实例引用。

    类的定义下面是使用类的代码示例,PHP也是通过new关键字来实例化一个类。通过->运算符来引用对象的方法。注意其静态类的引用方法是::,这是和C++一致的。

    下面再简单介绍下类的继承。PHP中使用extends关键字来实现类的继承,这是和Java一致的:

    <?php
            class BaseClass {
                function __construct() {
                    print "In BaseClass constructor\n";
                }
            }
            class SubClass extends BaseClass {
                function __construct() {
                    parent::__construct();
                    print "In SubClass constructor\n";
                }
            }
          
            $obj = new BaseClass();
            $obj = new SubClass();
    ?>

    输出的结果是: In BaseClass constructor In BaseClass constructor In SubClass constructor

    要注意,PHP的子类的构造函数不会自动调用父类的构造函数,必须在程序中显式地调用。使用parent关键字可以得到父类的引用。另外,由于PHP本身是弱类型的,所以“多态“的概念也不存在了,实际上,它永远都是多态的。

    接口

    接口定义了一组方法,但不实现他们。其语法为:

    interface  IInterfaceName
    {
       //常量、函数定义 
    }

    类利用implements关键字来表面实现某个接口,这和Java是一致的。

            <?php
               interface IAddable{
                  function Add($something);
               }
    
               class AddClass implements IAddable
               {
                   private $data;
                   function AddClass($num){
                       $data=$num;
                   }
                   public function Add($something)
                   {
                       $data+=$something;
                       return $data;
                   }
               }
    
               $a=new AddClass (5);
               echo $a instanceof IAddable;
               echo $a->Add(10);
            ?>

    其中 instanceof关键字是PHP5新增的,用来判断一个对象是不是某个类的实例,或者它的类型是不撒实现了某个接口。

  • 相关阅读:
    事事浑不着意,总得有走心的地方
    Struts2框架概述
    java算法数据结构
    shell十三问(转)
    linux:将job放在后台执行的方法
    Python性能(转)
    python collections deque
    python中的参数传递和返回值
    python中的下划线
    python学习笔记glob模块
  • 原文地址:https://www.cnblogs.com/yinzixin/p/1931182.html
Copyright © 2011-2022 走看看