作者: laochonger | 来源:发表于2018-04-11 16:01 被阅读0次
<?php
class classname
{
    function  _construct($param){
        echo $param;
    }
}

$a = new classname("First");
$b = new classname("second");


class classname2{
    public $attribute;
    function operation($param){     //用$this访问该类中的属性
        $this->attribute = $param;
        echo $this->attribute;
    }
}

//是否可以在类的外部访问一个属性,是由访问修饰符来决定的,这个例子没有对属性设置访问的限制,因此可以按照如下的方式从类的外部进行访问

$a = new classname2();
$a ->attribute = "value";
echo $a ->attribute;

//通常从类的外部直接访问类是糟糕的想法。
//可以使用__get() 或者 __set()函数来实现对属性的访问。
//如果不直接访问一个类的属性而是编写访问函数,那么可以通过一段代码执行所有访问

class classname3{
    public attribute;
    function __get($name){
        renturn this->$name;
    }
    function __set($name, $value)
    {
        // TODO: Implement __set() method.
        $this->$name = $value;
    }
}

//get函数返回了$attribure的值,set函数设置了值
//get带有一个参数(属性的名称)并返回该属性的值
//set带有两个参数,分别是要设置的属性的值和要被设置的值
//我们并不会直接访问这些函数

$a = new classname3(); //可以用get和set函数来检查和设置任何属性的值
$a->$attribute = 5; //set
$a->attribute;//get(没有$)

//所有的变量都需要$,其中在class的情况下,由类名、new的对象名、$this、parent使用(::)或者(->)引出来的变量不需要,方法不需要,常量不需要
//初看起来,这段代码可能作用不大
//但是提供访问器函数的理由就是这么简单:我们只是用一段代码来访问特定的属性
//只有一个访问入口,就可以实现对要保存的数据进行检查

function _set($name, $value){
    if(  ($name = "attribute")  && ($value >= 0) && ($value <= 100)){
        $this->attribute = $value;
    }
}

//通过单一的访问入口,可以方便地改变潜在的程序实现
//我们可能决定不将$attribute你保存为一个变量,而只在需要的时候将它从数据库中取出,或者在要求计算的时候后计算出其新值
//无论做什么样的改变,只要修改访问器函数既可
//只要保证这个访问器函数仍然接收并返回程序的其他部分期望的数据类型,那么程序的其他部分代码就不会受影响

//默认选择public,可以在类的内部和外部进行访问
//private,只能在内部进行访问
//protected,介于1与2之间

相关文章

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/eahzhftx.html