php类成员变量
① 关于php 构架和继承类的问题和成员变量是什么意思
public function __construct($name,$age,$avirpois,$sex,$height){//定义个构造 构架是起到什么作用的
构造函数就是当你new一个对象的时候自动执行的
$this->name=$name; //继承了父类为什么这里还要调用成员变量
你new zilei("李亚","165"); 执行子类的构造函数,构造函数中给父类的成员变量赋值,并不执行父类的构造方法,要执行的话就要在子类中加parent::__construct
② php 类中 通过成员方法访问成员变量有什么好处,我知道是争对于安全性,但不能解释怎么个安全法,
将成员变量私有化,并使用公有接口去访问,是为了保证数据的正确性,保证对象能够正常工作。
对象有两个作用,一是保存数据,二是拥有操作数据的方法。对象就是一个黑盒子,隐藏数据操作细节,而我们可以轻松地处理和取得数据,不需要了解内部的处理过程。对象的数据只由它自己去处理,没有外部干涉,这样的数据是安全的可信任的。
如果我们能够任意改变对象的数据,就是对其密封性的破坏。在"外力"的作用下,对象拥有的数据类型和值发生改变,很可能会影响其内部的处理过程,严重时会发生错误。
示例一:
classDivision{
public$a;
public$b;
publicfunction__construct($a,$b){
if($b==0)
thrownewException('divisionbyzero!');
$this->a=$a;
$this->b=$b;
}
publicfunctionrun(){return$this->a/$this->b;}
}
$a=newDivision(5,5);
$a->b=0;
$a->run();//出错了,因为除数被设为了0
在上例中,虽然构造函数对传入的变量经行了过滤,但由于变量是公有的,用户“不小心”更改了$b的值,造成了程序异常。
使用函数来访问变量,可以对变量经行预处理,防止用户传入了不合法的值。这就像是在对象的前面加上了一道“防火墙”,保证程序正常地工作。
示例二:
classA{
publicfunctioncall(){echo'A->call()iscalling!';}
}
classB{
private$_a;
publicfunctionsetA(A$a){
if(!is_callable($a,'call'))
thrownewException('A->call()isnotcallable!');
$this->_a=$a;
}
publicfunctioncall(){
if($this->_a)
$this->_a->call();
}
}
在上例中,属性$a是私有的,只能通过setA()方法来设置。setA()方法中使用了PHP的“类型提示”功能,这就要求传入的参数必须是A的实例。在函数中的代码又检查了$a对象是否含有可以调用的$a->call()方法,如果失败就会抛出异常。从而保证了传入变量的正确性。
希望能帮到您~也希望能够及时采纳~
③ php类中通过var定义的成员变量,是什么访问权限的
var 一般是出现在类中。一般的过程和函数不要 var定义变量.
且它的级别为public。亦不能用任何其它的修饰符。需要注意的是:在成员方法中亦不能这样声明。
④ PHP类的静态(static)方法和静态(static)变量使用介绍
在php中,访问类的方法/变量有两种方法:
1.
创建对象$object
=
new
Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。
2.
直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
A.
如果是变量,需要该变量可访问。
B.
如果是方法,除了该方法可访问外,还需要满足:
b1)
如果是静态方法,没有特殊条件;
b2)
如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。
然后我们再看一下使用$object->…
和使用class::…
都有什么区别:
1.
使用$object->…
,需要执行构造函数创建对象;
2.
使用class::…
调用静态方法/变量,不需要执行构造函数创建对象;
3.
使用class::…
调用非静态方法/变量,也不需要执行构造函数创建对象。
然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?
差异还是显然存在的,如下:
1.
静态变量
静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也就是说,所有的实例共享这个成员。
2.
静态方法
静态方法可以直接使用class::…
来调用,而非静态方法需要满足一定限制条件才能使用class::..
的方法调用,如之前所述
⑤ php 成员变量不能是多维数组
不关多维数组的事,而是在类定义里面不允许直接给变量赋值!!
比如你把$arr =array('a1'=>$arr2=array('a4'=>$arr3=array('a'=>'11'),'a5'=>'55'),'a2'=>'22','a3'=>'33');
改为
$arr=1 一样会报错.
清楚没有?
你可以在class外部定义变量,然后在class里调用.
⑥ 继承中设置成员变量 php
照你的描述应该是不可以的。php是一种只支持单重继承的语言,子类在继承父类的时候一定要继承父类的所有的构造方法。要多重继承的时候要用到接口(php不支持多重继承)
⑦ PHP类的成员属性
一个好的编程习惯是所有变量都定义,“可以不定义”并不是你不定义的理由。如果有可能,最好能把没有定义的变量都当作编译错误报告,这样可以避免写错变量名。如果PHP不检查这个,说明语法检查不严谨
⑧ PHP中全局变量 局部变量 成员变量有什么区别
局部变量只能函数内部使用作为
return函数返回值,
调用函数的形参
局部变量,全局变量要页面能使用,但是类中函数中不能使用,需要传入赋值使用,php种没有成员变量的说法!
⑨ php构造方法对成员变量赋值 function__construct
function __construct
function 是系统关键词,表示定义一个方法,后面加空格然后根方法名( __construct
是方法名)。你的未加空格
__construct 是系统内置的,叫魔术方法,每次实例化类是会自动执行此方法。
还有就是调用类的成员变量不需要在变量前面加 $ 比如:
$this->school_name = $name; 正确
$this->$school_name = $name; 错误
<?php
class School {
public $school_name;
public $school_student;
public $school_room;
public $school_teacher;
function __construct($name, $student, $room, $teacher) {
$this->school_name = $name;
$this->school_student = $student;
$this->school_room = $room;
$this->school_teacher = $teacher;
}
function show() {
echo "!@#$%^&*";
}
}
class People extends School {
public $teachername;
function __construct($tname, $studentconsts) {
$this->teachername = $tname;
$this->school_student = $studentconsts;
}
function show() {
return "今天上课" . $this->teachername . "讲课,学生" . $this->school_student . "人";
}
}
class Tongji extends School {
function show() {
return "学校名:" . $this->school_name . "学生数:" . $this->school_student . "教室数:" . $this->school_room . "教师数:" . $this->school_teacher;
}
}
$a = new People ( "周周周", 20 );
$b = new School ( "DZ", 20, 50, 2 );
echo $a->show () . "<br>";
echo $b->show ();
?>
⑩ php共享成员变量
self::function1()访问方法
$this->属性 访问属性
在类的内部访问方法用::
访问属性是->
还有你应该在class a的下面这样写
public $a;把变量设置为类的属性,才能用$this->a在类的内部获取到