A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-7-24 11:44 编辑

【黑马程序员济南】PHP课程同步笔记:类中成员

类中成员
      包括:
            类常量;
            属性分为静态属性和实例属性;
            方法分为静态方法和实例方法;
      细化:
            class  类名{
                  //类常量:
                  //const  常量名  =  常量值; //必须在此时赋值!
                        const  PI  =  3.14;
                  //实例属性:
                        var  $p1  = 1; //赋值
                        var  $p2  ; //不赋值
                  //静态属性:
                        static  $p3  = 3; //赋值;
                        static  $p4  ; //不赋值
                  //实例方法:
                        function  f1(.....){  。。。。。 }
                  //静态方法:
                        static  function  f2( .... ) {  。。。。。}
            }
类常量
      其实就是常量,无非,其定义在一个类中;
      定义形式:
            class  类名{
                  const  常量名 = 值; //值只能是“直接值”(字面值)
            }
      使用形式:
            类名::常量名
            class  A{
                  const  PI = 3.14;
            }
            echo  A::PI;
            $s = A::PI * 2 * 2; //算半径为2的圆面积;
实例属性和静态属性
      实例属性:只能该类的对象来使用:
            $对象->实例属性名;
      静态属性:只能该类本身来使用:
            类名::$静态属性名
      重要区别
            实例属性是可以随着对象的增多,而可以变成“多份数据”,而静态属性,对一个类来说,就只有一份!
[PHP] 纯文本查看 复制代码
<?php
//传智播客出品
//演示实例属性和静态属性的使用和区别
class A{
var $p1 = 1;
var $p2;
static $p3 = 3;
static $p4;
}

//创建一个A的对象
$a1 = new A();
$a1->p1 = 11;
$a1->p2 = 22;
A::$p3 = 33;
A::$p4 = 44;

//创建另一个A对象
$a2 = new A();
$a2->p1 = 111;
$a2->p2 = 222;
A::$p3 = 333;
A::$p4 = 444;


var_dump($a1);
echo "<br />";
var_dump($a2);
echo "<br />";
echo A::$p3;
echo "<br />";
//删除静态属性
//unset(A::$p4); 删除静态属性会报致命错误导致后面代码无法执行
echo A::$p4;
echo "<br />";
//删除实例属性
unset($a1->p1);
var_dump($a1);
执行结果为:
      object(A)#1 (2) {["p1"]=>int(11) ["p2"]=>int(22)}
      object(A)#2 (2) {["p1"]=>int(111) ["p2"]=>int(222)}
      333
      444
      object(A)#1 (1) {["p2"]=>int(22)}
通常,静态属性,用于存储一个类的所有对象的共有特性信息,比如:
[PHP] 纯文本查看 复制代码
<?php
//传智播客出品
class Student{
    var $name = "";
    static $count = 0;
}

$s1 = new Student();
$s1->name = "张三";
Student::$count++;

$s2 = new Student();
$s2->name = "李四";
Student::$count++;

伪变量(关键字)$this
      它只能用在一个类的一个方法中;
      它代表一个对象;
      它代表调用该方法的对象——任何方法,一定是某个“对象”来调用
实例方法和静态方法
实例方法
      就是一个类的对象所“拥有”的方法;
      每个类,都可能有多个对象;
      每个对象,执行该方法,都可能会得到不同的结果。

      注意:只要在一个类中定义了一个实例方法,则该类的对象,就一定会拥有该方法;

      调用:
            $对象变量->实例方法名(....);
静态方法:
      就是一个类本身所拥有的方法;
      调用:
            类名::静态方法( ... );
[PHP] 纯文本查看 复制代码
<?php
//传智播客出品
class A{
    var $name;
    var $age = 18;
    function IntroMe(){
        echo "<p>大家好";
        echo "<br />我叫".$this->name;
        echo "<br />我今年".$this->age."岁</p>";
    }
    static function f2(){
        echo "<p>这是A类中的一个静态方法f2</p>";
    }   
}

$a1 = new A();
$a1->name = "张三";
$a1->age = 22;
$a1->IntroMe();
A::f2();

$a2 = new A();
$a2->name = "李四";
$a2->age = 23;
$a2->IntroMe();
A::f2();

输出的结果为:
      大家好
      我叫张三
      我今年22岁

      这是A类中的一个静态方法f2

      大家好
      我叫李四
      我今年23岁

      这是A类中的一个静态方法f2





评分

参与人数 1黑马币 +1 收起 理由
jingxian90 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
焦哥 写的好~ 通俗易懂,简明扼要,条理清晰
回复 使用道具 举报
楼上一看就是同道中人
回复 使用道具 举报
济南王昭珽 来自手机 黑马帝 2017-7-27 19:14:21
板凳
很详细,赞一个
回复 使用道具 举报
回复 使用道具 举报
你好,
在类中的静态方法中,是不能使用$this伪变量的吧,
个人理解因$this代表的是调用方法的对象,而静态方法属于类本身
但是$this既然代表对象,是属于当前类的实例,
为什么类中的静态方法不能使用$this->实例属性
静态方法中调用属性是否必须属性是静态的
<?php
class B{
        var $p1 =1;
        static $p2=2;
        function a1(){}
       
        static function b1(){
                //echo $this->p1;   //为什么这么不行
                echo self::$p2;
        }
       
}

$b = new B();
B::b1();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马