关于 php 类成员属性声明和访问的问题
类里的变量是否一定要声明为成员属性?就是private$var这种形式。我发现在类里面如果不把变量声明为成员属性,只要不用$this->成员属性(也就是直接访问),一样可...
类里的变量是否一定要声明为成员属性?就是 private $var这种形式。 我发现在类里面如果不把变量声明为成员属性,只要不用$this->成员属性(也就是直接访问),一样可以调用。但是却无法用$this->访问这些未声明的变量。怎么回事呢? (2)下例中的: $this->nstr=preg_replace($this->pattern,$this->rep,$this->str); file_put_contents($this->file,$this->nstr); 也可以改成: $nstr=preg_replace($this->pattern,$this->rep,$this->str); file_put_contents($this->file,$nstr); (3)下例中的 foreach($this->post as $key=>$value)语句中,变量$key和$value都没有声明为成员属性,也一样可以正常调用。 -------------------------------------------------------------------------------------------------------- 例子:修改网站配置文件(经测试可以正常运行) <?php class creatAdmin{ private $post; private $file; private $str; private $nstr; private $pattern; private $rep; function __construct($posts,$files){ $this->post=$posts; $this->file=$files; } function modifyFile(){ $this->str=file_get_contents($this->file); $this->pattern=''; $this->rep=''; foreach($this->post as $key=>$value){ $this->pattern[]="/define\(\"{$key}\",\".*?\"\)/i"; $this->rep[]="define(\"{$key}\",\"{$value}\")"; } $this->nstr=preg_replace($this->pattern,$this->rep,$this->str); file_put_contents($this->file,$this->nstr); } } if(isset($_POST['sub'])){ $creatAdmin=new creatAdmin($_POST,'config.inc.php'); $creatAdmin->modifyFile(); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>test</title> </head> <body> <form action="filesystem03.php" method="post"> 数据库:<input type="text" name="DBNAME" value="" /><br /> 主机名:<input type="text" name="DBHOST" value="" /><br /> 用户名:<input type="text" name="USERNAME" value="" /><br /> 密码:<input type="text" name="PASSWORD" value="" /><br /> Email:<input type="text" name="EMAIL" value="" /><br /> <input type="submit" name="sub" value="提交" /> </form> </body> </html>
靠...百度的编辑器疯了..代码全乱了。 其实上面的例子作用也不大...如果觉得看的头晕就直接忽略。我再把问题发一遍: (1)类里的变量是否一定要声明为成员属性?就是 private $var这种形式。 我发现在类里面如果不把变量声明为成员属性,只要不用$this->成员属性(也就是直接访问),一样可以调用。但是却无法用$this->访问这些未声明的变量。怎么回事呢? (2)下例中的: $this->nstr=preg_replace($this->pattern,$this->rep,$this->str); file_put_contents($this->file,$this->nstr); 也可以改成: $nstr=preg_replace($this->pattern,$this->rep,$this->str); file_put_contents($this->file,$nstr); (3)下例中的 foreach($this->post as $key=>$value)语句中,变量$key和$value都没有声明为成员属性,也一样可以正常调用 展开
靠...百度的编辑器疯了..代码全乱了。 其实上面的例子作用也不大...如果觉得看的头晕就直接忽略。我再把问题发一遍: (1)类里的变量是否一定要声明为成员属性?就是 private $var这种形式。 我发现在类里面如果不把变量声明为成员属性,只要不用$this->成员属性(也就是直接访问),一样可以调用。但是却无法用$this->访问这些未声明的变量。怎么回事呢? (2)下例中的: $this->nstr=preg_replace($this->pattern,$this->rep,$this->str); file_put_contents($this->file,$this->nstr); 也可以改成: $nstr=preg_replace($this->pattern,$this->rep,$this->str); file_put_contents($this->file,$nstr); (3)下例中的 foreach($this->post as $key=>$value)语句中,变量$key和$value都没有声明为成员属性,也一样可以正常调用 展开
3个回答
展开全部
你总共提了三个问题,三个问题都是关于访问权限控制的,建议你将面向对象的访问权限控制的那部分给学习一下。
(1)类里的变量是否一定要声明为成员属性,
答:不一定,在一个类中,有构造函数、属性、方法;未在方法和构造函数中声明的变量为属性,属性是体现这一个类(对象)的特性的描述,他是这个类的特性的描述,这个类的状态的改变将会随着这些属性值的改变而改变。如果某一变量不属于这个类的属性,当然可以声明在别的地方,只要在访问权限内,当然也可以访问,就像foreach($this->post as $key=>$value),$key与$value都不是类的属性,当然不用声明在类的属性部分了,这里的$key与$value便成了这个方法的局部变量。
(2)非类的属性,绝对不能用$this->来访问,$this指的是当前对象,$this->所指向的是当前对象的属性或许方法,既然不是类的属性,当然不能用$this->来访问了,
(1)类里的变量是否一定要声明为成员属性,
答:不一定,在一个类中,有构造函数、属性、方法;未在方法和构造函数中声明的变量为属性,属性是体现这一个类(对象)的特性的描述,他是这个类的特性的描述,这个类的状态的改变将会随着这些属性值的改变而改变。如果某一变量不属于这个类的属性,当然可以声明在别的地方,只要在访问权限内,当然也可以访问,就像foreach($this->post as $key=>$value),$key与$value都不是类的属性,当然不用声明在类的属性部分了,这里的$key与$value便成了这个方法的局部变量。
(2)非类的属性,绝对不能用$this->来访问,$this指的是当前对象,$this->所指向的是当前对象的属性或许方法,既然不是类的属性,当然不能用$this->来访问了,
追问
那么一般情况下,什么变量应该声明为类属性?什么变量可以不用呢?
追答
比如说对一个学生类,就有年龄、学好、性别、爱好、身高等属性。它描述这一个学生的特征。
就可以声明为属性。而其它不属于描述这个学生类的特征的变量,就可以不用声明为属性。
展开全部
类里面声明的不是变量,是类属性.
对象里也可以用变量,和常规变量一样使用.
但是属性不同,属性只属于类.类自身调用属性就要用到$this. 被实例化的对象也可以调用: 对象名->属性; 但必须保证属性是公共的: public
建议再学习一下OO的理论基础.
对象里也可以用变量,和常规变量一样使用.
但是属性不同,属性只属于类.类自身调用属性就要用到$this. 被实例化的对象也可以调用: 对象名->属性; 但必须保证属性是公共的: public
建议再学习一下OO的理论基础.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
逐个回答你的问题吧 。
1)类内不声明的变量不属于成员变量
2)可以直接访问变量,但在类外部访问时,你会发现,成员变量根本就没变化。
3)既然你使用了类,那么你就是想在类外部访问这些成员或方法,否则直接用函数还方便。
1)类内不声明的变量不属于成员变量
2)可以直接访问变量,但在类外部访问时,你会发现,成员变量根本就没变化。
3)既然你使用了类,那么你就是想在类外部访问这些成员或方法,否则直接用函数还方便。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询