当前位置:首页 » 编程语言 » php访问属性

php访问属性

发布时间: 2022-06-13 19:35:42

1. php扩展 怎么访问常量属性

访问器属性不包含数据值;它们包含一对getter和setter函数(不过,这两个函数都不是必须的)。在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据。访问器属性有如下4个特性。
[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为true。
[[Enumerable]]:表示能否通过for-in循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为true。
[[Get]]:在读取属性时调用的函数。默认值为undefined。
[[Set]]:在写入属性时调用的函数。默认值为undefined。
访问器属性不能直接定义,必须使用Object.defineProperty()来定义。例如:
var
book
=
{
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function(){
return
this._year;
},
set:function(newValue){
if(newValue>2004)
{
this._year
=
newValue;
this.edition
+=
newValue-2004;
}
}
});
book.year
=
2005;
alert(book.edition);//2
以上代码创建了一个book对象,并给它定义两个默认的属性:_year和edition。_year前面的下划线是一种常用的记号,用于表示只能通过对象方法访问的属性。而访问器属性year则包含一个getter函数和一个setter函数。getter函数返回_year的值,setter函数通过计算来确定正确的版本。因此,把year属性修改为2005会导致_year变成2005,而edition变为2。这是使用访问器属性的常见方式,即设置一个属性的值会导致其他属性发生变化。
不一定非要同时制定getter和setter。只指定getter意味着属性不能写,尝试写入属性会被忽略。在严格模式下,尝试写入只指定了getter函数的属性会抛出错误。类似的,只指定setter函数的属性也不能读,否则在非严格模式下会返回undefined,而在严格模式下会抛出错误。
支持ECMAScript
5的这个方法的浏览器有IE9+(IE8只是部分实现)、FF4+、Safari5+、Opera12+和Chrome。在这个方法之前,要创建访问器属性,一般都使用两个标准的方法:_defineGetter_()和_defineSetter_()。这两个方法最初是由Firefox引入的,后来Safari3、Chrome1和Opera9.5也给出了相同的实现。使用这两个遗留的方法,可以像下面这样重写前面的例子。
var
book
={
_year=2004,
edition:1
};
//定义访问器的旧方法
book._defineGetter_("year",function(){
return
this._year;
});
book._defineSetter_("year",function(){
if(newValue>2004){
this._year
=
newValue;
this.edition
+=
newValue
-
2004;
}
});
book.year=2005;
alert(book.edition);//2
在不支持Object.defineProperty()方法的浏览器中不能修改[[Configurable]]和[[Enumerable]]。

2. php你如何访问和设置一个类的属性

class Demo
{
private $_var1 = 0;

public function getVar1()
{
return $this->_var1;
}
public function setVar1($value)
{
$this->_var1 = $value;
}
}

$demo = new Demo();
$demo->setVar1(10);
echo $demo->getVar1();

3. 关于 php 类成员属性声明和访问的问题

你总共提了三个问题,三个问题都是关于访问权限控制的,建议你将面向对象的访问权限控制的那部分给学习一下。
(1)类里的变量是否一定要声明为成员属性,
答:不一定,在一个类中,有构造函数、属性、方法;未在方法和构造函数中声明的变量为属性,属性是体现这一个类(对象)的特性的描述,他是这个类的特性的描述,这个类的状态的改变将会随着这些属性值的改变而改变。如果某一变量不属于这个类的属性,当然可以声明在别的地方,只要在访问权限内,当然也可以访问,就像foreach($this->post as $key=>$value),$key与$value都不是类的属性,当然不用声明在类的属性部分了,这里的$key与$value便成了这个方法的局部变量。
(2)非类的属性,绝对不能用$this->来访问,$this指的是当前对象,$this->所指向的是当前对象的属性或许方法,既然不是类的属性,当然不能用$this->来访问了,

4. 在php中如何设置类的属性,如何调用类的方法

PHP访问类的属性、方法使用箭头语法(->)。这里我给你一个例子供你参考:

<?php
classMyClass{//定义MyClass类
public$name;//定义了一个公有属性
protected$_age;//定义了一个保护属性
private$_email;//定义了一个私有属性

publicfunctionmy_method(){//定义my_method方法
}

protectedfunction_my_method2(){//定义_my_method2方法
}
}
$obj=newMyClass;//实例化
$obj->name='noname';//设置name属性
$obj->_age=12;//这是错误的,不能设置保护属性
$obj->address='KingStreet.'//设置一个未声明的属性是允许的,效果和公有属性类似,但未赋值前不能使用。
$obj->my_method()//调用公有方法
$obj->_my_method2();//这是错误的,不能调用保护方法

你需要理解继承、公有、保护和私有的概念。

继承:子类继承父类的公有、保护属性和方法。

公有:类的实例可以访问的属性和方法。

保护:只能在类的内部及其子类内部访问的属性和方法。

私有:只能在类的内部访问的属性和方法。


这是个很基础的问题,建议你多看书。

5. php 实例化对象为什么可以访问静态属性

实例化的对象不能访问静态属性,但是没有说不能用实例化的对象方法访问静态属性。
意思是不能通过($对象名->静态变量)这种方式访问
可以通过$foo::$my_static; 来访问

6. php子类可以继承和访问父类的私有属性和方法吗

你这样理解也可以,当父类有私有的方法和属性,子类是继承不到的,所以子类不能访问父类的私有方法和属性。java
特性,private:类中只要限定为private的成员,只能被这个类本身访问

7. php访问对象属性为数组时的情况

一样得,例如:

<?php

classstudent{

private$id;//定义属性,学号

private$name;//定义属性,姓名

private$teacher;//定义属性,所属老师,array

//读取值

publicfunctiongetteacher(){

$this->teacher=array('甲','乙');

return$this->teacher;

}

}

$d=newstudent();

$stu_teacher=$d->getteacher();

echo"<pre>";

print_r($stu_teacher);

echo"</pre>";

?>

8. PHP中,为什么子类可以访问父类的私有属性,而且可以直接调用

你写的不对哦。
按你写的,
name
是子类是属性,而不是父类的。
这样:
<?php
class
Person
{
private
$name="zhangsan";
}
class
Man
extends
Person
{
}
$m
=
new
Man();
//$m->name="zhangsan";
echo
$m->name;
?>

9. php如何通过子类继承父类共有方法访问父类私有属性

在父类中加个public方法,
如private
$aaa
=
'test';
public
function
getAAA(){
return
$this->aaa;
}
在子类中调用parent::getAAA();就可以获得父类私有属性
当然如果你想获取多个,可以改成动态变量名,
getAAA($v){
return
$this->{$v};
}

10. php 对象直接访问私有属性~呢

观察了你的很多问题,为什么都要以'呢'结尾呢?
私有属性只有在雷内才可以访问,对象如果要访问的话,需要一个public入口才能访问.也就是
public function getPrivate(){
return $this->private;

}

热点内容
linux安全运维 发布:2025-02-07 11:14:19 浏览:734
阿里云集群服务器 发布:2025-02-07 11:12:38 浏览:451
如何选择家庭最佳配置 发布:2025-02-07 11:06:50 浏览:87
javatomcat服务器搭建服务器 发布:2025-02-07 10:55:22 浏览:622
vcenter存储器集群 发布:2025-02-07 10:54:31 浏览:583
咖啡的脚本 发布:2025-02-07 10:46:18 浏览:520
nsftp速度 发布:2025-02-07 10:30:58 浏览:431
存储过程ifor 发布:2025-02-07 10:25:28 浏览:434
命令行执行oracle脚本文件命令行 发布:2025-02-07 10:14:49 浏览:96
ibook安卓怎么下 发布:2025-02-07 10:12:13 浏览:693