zoukankan      html  css  js  c++  java
  • PHP类(Class)入门教程

    PHP类(Class)入门教程   
    刚在大略浏览了上篇有关Class的文章,很不错,建议看看。
    对类的摸索~~俺用了半年时间才大概理解类的作用和实现。主要是没有一篇能让我理解的文章(之前没接触过任何OO的东西)。
    以我的观点来说说PHP中的Class,用于表达的语言都是非正式的语言,也不能确定是否正确。
    建立一个类很简单。
    1. <?php
    2. class my_class {}
    3. ?>
    类到底干什么呢?很多人都是什么黑匣子,我在这里称它为一个独立的整体。我们只知道类名,而不知道里面有什么东西。那么,该如何使用这个类呢?
    首先:要知道它里面是否定义了公共的变量--专业术语上称它为“属性”。
    其次:要知道它里面定义了什么函数--专业术语中称它为“方法”。
    我都被这些专业术语搞糊涂了,所以干脆不理它了。
    类中的如何定义公共变量,它有什么作用呢?
    很简单,我们来扩充 my_class 类
    1. <?php
    2. class my_class
    3. {
    4.       var $username;
    5. }
    6. ?>
    看上面很简单,我们定义了一个公共的变量,只是用 var+空格+普通变量名 构成。它有什么用呢?考虑一下函数中,如果我们要访问函数外的变量,是不是要先 global 一下呢?这个想实现的效果也是如此,它是想让这个类中的所有函数都能访问它,而它区别于函数的一个地方,是类的外部也可以访问这个变量,我随后再讲外部如何访问它。还有一个区别,不能用复杂的语句给这个变量赋值(具体的等理解了类以后自己去看规则)。给它一个默认值
    1. <?php
    2. class my_class
    3. {
    4.       var $username = "深空";
    5. }
    6. ?>
    OK,定义了一个公共的变量了,接下来定义一个函数(也就是所谓的“方法”)。
    1. <?php
    2. class my_class
    3. {
    4.       var $username = "深空";
    5.   
    6.       function show_username()
    7.       {
    8.       }
    9. }
    10. ?>
    这个定义函数跟普通的定义函数形式上没什么区别了。简单就好,定义一个打印 $username 的函数:
    1. <?php
    2. class my_class
    3. {
    4.       var $username = "深空";
    5.   
    6.       function show_username($username)
    7.       {
    8.           echo $username;
    9.       }
    10. }
    11. ?>
    到这里可能某些人开始迷糊了,呵呵,最关键的就是这里了,看清楚了。现在有三个 $username 了。到底哪个是哪个啊~~
    函数所带的行参,不用解释了吧?这个函数功能就是打印行参所接收的值,也就是如果:
    1. <?php
    2. show_username("猪头深空");
    3. ?>
    那么它将打印 “猪头深空” ,就这么简单。
    怎么样访问这个函数?肯定不是我上面说的那样直接 show_username(”猪头深空”); 了,别急,类有类的一套。如下:
    1. <?php
    2. $Name = new my_class();
    3. ?>
    这样就初始化上面的那个 my_class 的类了,并把这个对象赋给变量 $Name ,你可以这样理解,这个变量就代表整个类了,呵呵。
    使用类中的函数:
    1. <?php
    2. $Name->show_username("猪头深空");
    3. ?>
    晕了,为什么这么复杂?还要箭头?其实很形象的。本来已经把类给了变量 $Name 了是吧?也就是 $Name 代表了这个类,然后用一个箭头指向类中的 show_username 这个函数。就是这么简单,也就是说,这个函数是这个类中的,而不是其他的函数--你就理解为表示一个区别吧,呵呵。
    试试看哦,打印出 “猪头深空” 这四个字了。你说为什么要这么复杂?用函数不是也能实现么?我说,这么简单的你当然看不出好处了,我们继续扩充。
    还有一个疑问:刚才说的“公共的变量”怎么一点用处都没有呢?为什么这个函数不会自动接收这个公共变量 var $username 中的默认值?也就是如果我使用:
    1. <?php
    2. $Name->show_username($username);
    3. ?>
    会有什么结果呢?答案是没有任何输出。因为你没有给形参 $username 一个值。
    那么该怎么使用这个公共的变量?我们来修改一下这个类:
    1. <?php
    2. class my_class
    3. {
    4.       var $username = "深空";
    5.   
    6.       function show_username()
    7.       {
    8.           echo $this->username;
    9.       }
    10. }
    11. ?>
    哇靠,不是吧,这回脸形参都没有了?还多了一个$this->,晕了不是,呵呵。其实这也是类的一个最大的方便之处。
    $this 的作用:访问一个公共的变量,或者类里面的函数。
    访问?这么专业?其实就是用 $this->username 来代替 var $username 而已拉,$this 用来说明它是公共的。可以访问的,函数外部的东西。
    试试看:
    1. <?php
    2. $Name->show_username();
    3. ?>
    看到了吧,终于打印 “深空” 这两个字了,娃哈哈。
    我不打印“深空”这两个字,我要打印“猪头深空”,怎么办?很简单,我们给这个公共变量重新赋值拉。服了你了。
    1. <?php
    2. $Name->username = "猪头深空";
    3. ?>
    这个能明白意思么?$Name->username 表示的是类里面的这个公共变量。等号赋值不用我解释了。
    我们再来打印看看
    1. <?php
    2. $Name->show_username();
    3. ?>
    哈哈,终于打印“猪头深空”了。不错吧,很方便吧,不用形参也能任意修改打印值哦~~。
    不过单单打印一个名称也太没意思了,我们说点欢迎的话吧,来扩充一下这个类,创建一个名叫 Welcome 的函数:
    1. <?php
    2. class my_class
    3. {
    4.       var $username = "深空";
    5.   
    6.       function show_username()
    7.       {
    8.           echo $this->username;
    9.       }
    10.   
    11.       function Welcome()
    12.       {
    13.       }
    14. }
    15. ?>
    恩,实现什么功能好呢?简单点吧,就实现在名字前面有 “欢迎” 两个字好了
    1. <?php
    2. class my_class
    3. {
    4.       var $username = "深空";
    5.   
    6.       function show_username()
    7.       {
    8.           echo $this->username;
    9.       }
    10.   
    11.       function Welcome()
    12.       {
    13.           echo "欢迎";
    14.           $this->show_username();
    15.       }
    16. }
    17. ?>
    第二次看到 $this 了吧?$this->show_username(); 干什么用呢?其实它就是调用 show_username 这个函数,用 $this 来表示这个函数在类中并且和 Welcome 函数平行,而不是在其他地方(比如Welcome函数中)。
    Welcome 函数实现的功能很简单,首先打印两个字”欢迎”,然后接下去执行 show_username 函数,打印名字。
    来试试这个函数吧:
    1. <?php
    2. $Name->Welcome();
    3. ?>
    看到了吧,打印出“欢迎深空”这四个字了。
    可是我要打印“欢迎猪头深空”,怎么办?我服了你了,我们给公共变量 var $username 一个值吧:
    1. <?php
    2. $Name->username = "猪头深空";
    3. ?>
    接下去打印欢迎语:
    1. <?php
    2. $Name->Welcome();
    3. ?>
    嘿嘿,终于打印“欢迎猪头深空”了。
    怎么样?明白了类的用法了么?好处在于能够调用类中的任意函数,只要用 $this 指出来,可以改变一个公共变量的值,可以在类中的函数中使用这个公共变量。………多了去了,它的应用等待你去发现了。

    定义一个类
    当你声明一个类,你需要列出对象应有的所有变量和所有函数—被称为属性和方法. 3.1.1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数. 3.1.2中显示了如何在一个类中定义三个属性和两个方法.
    3.1.1
    class Name extends Another Class
    {
         Access Variable Declaration
         Access Function Declaration
    }
    3.1.2
    <?php
         //定义一个跟踪用户的类
         class User
         {
             //属性
             public $name;
             private $password, $lastLogin;
             //方法
             public function __construct($name, $password)
             {
                 $this->name = $name;
                 $this->password = $password;
                 $this->lastLogin = time();
                 $this->accesses++;
             }
             // 获取最后访问的时间
             function getLastLogin()
             {
                 return(date("M d Y", $this->lastLogin));
             }
         }
         //创建一个对象的实例
         $user = new User("Leon", "sdf123");
         //获取最后访问的时间
         print($user->getLastLogin() ."<br>\n");
         //打印用户名
         print("$user->name<br>\n");
    ?>
    当你声明属性,你不需要指明数据类型. 变量可能是整型,字符串或者是另一个对象,这取决于实际情况.在声明属性时增加注释是一个好主意,标记上属性的含义和数据类型.
    当你声明一个方法,你所做的和在类外部定义一个函数是一样的. 方法和属性都有各自的命名空间. 这意味着你可以安全地建立一个与类外部函数同名的方法,两者不会冲突. 例如,一个类中可以定义一个名为date()的方法. 但是你不能将一个方法命名为PHP的关键字,如for或者while.
    类方法可能包含PHP中所谓的type hint. Type hint 是另一个传递参数给方法的类的名字. 如果你的脚本调用方法并传递一个不是类的实例的变量,PHP将产生一个”致命(fatal)错误” . 你可能没有给其它类型给出type hint,就像整型,字符串,或者布尔值. 在书写的时候, type hint是否应当包含数组类型仍存在争议.
    Type hint是测试函数参数或者运算符的实例的数据类型的捷径. 你可能总是返回这个方法. 确认你强制让一个参数必须是哪种数据类型,如整型. 3.2.1 确保编译类只产生Widget的实例.
    3.2.1
    <?php
         //组件
         class Widget
         {
             public $name='none';
             public $created=FALSE;
         }
         //装配器
         class Assembler
         {
             public function make(Widget $w)
             {
                 print("Making $w->name<br>\n");
                 $w->created=TRUE;
             }
         }
         //建立一个组件对象
         $thing = new Widget;
         $thing->name = 'Gadget';
         //装配组件
         Assembler::make($thing);
    ?>
    除了传递参数的变量外,方法含有一个特殊的变量. 它代表类的个别实例. 你应当用这个来指向对象的属性和其它方法.一些面向对象的语言假设一个不合格的变量提交给本地属性,但在PHP中方法的任何变量只是在方法的一定范围内. 注意在User类的构造函数中这个变量的使用(3.1.2).
    PHP在属性和方法声明前定义一个访问限定语,如public,private和protected. 另外,你可以用”static”来标记一个成员. 你也可以在类中声明常量. 本章稍后会有不同访问方式的相关讨论.
    你可以在一行中列出相同访问方式的几个属性,用逗号来分隔它们. 在3.1.2中,User类有两个private属性--$password和$lastLogin.

  • 相关阅读:
    qt运行编译按钮居然是灰色的
    suse linux服务器的常用命令
    windows 防火墙的bug
    烦恼核心
    System.Data.OleDb.OleDbException (0x80004005) 的问题
    c#利用批处理清理大目录
    Spider Studio 社区信息
    示例
    示例
    Spider Studio 新版本 (20140225)
  • 原文地址:https://www.cnblogs.com/ymj0906/p/2550827.html
Copyright © 2011-2022 走看看