php 对象直接访问私有属性

<?php

	header("content-type:text/html;charset=UTF-8");
	class Person{
		//私有的成员属性,对直接访问象
		private $name;
		private $age;
		private $sex;

		//魔术方法 __construct(), __set(), __unset(), __isset(), __unset().....
		function __construct($name="name1",$age =20,$sex="女"){
			$this->name=$name;
			$this->age=$age;
			$this->sex=$sex;
		}

		/*
			输出 Cannot access private property Person::$name

			对象不能直接访问和设置私有属性的值,但是通过魔术方法__get($proName), __set($proName,$proValue)可以做到.
			步骤:
				1.重写魔术方法__get($property) , __set($proName,$proValue)
				2.用对象直接访问或设置私有属性
					$p1->name="对象直接访问私有属性";
					echo $p1->name;
				3.对象直接访问或设置私有属性时,会自动调用魔法方法__get($proName), __set($proName,$proValue)
		*/
		function __get($proName){
			return $this->$proName;
		}

		function __set($proName,$proValue){
			$this->$proName=$proValue;
		}

		function say(){
			echo "$this->name:我的年龄$this->age,性别:$this->sex<br>";
		}

		function run(){
			$this->left();
			$this->right();
		}

		private function left(){
			echo "left";
		}

		private function right(){
			echo "right";
		}

		//析构方法,对象销毁前自动调用
		function __destruct(){
			echo "$this->name:我走了<br>";
		}
	}
	 
	$p1 = new Person("name1",15,"女");
	$p2 = new Person("name2",20,"男");
	$p3 = new Person("name3",30,"女");

	/*
		对象直接访问或设置私有属性
	*/
	$p1->name="对象直接访问私有属性";
	echo $p1->name."<br>";

	/*
	输出,注意__destruct()的输出顺序

		name1:我的年龄15,性别:女
		name2:我的年龄20,性别:男
		name3:我的年龄30,性别:女

		name1:我走了
		name3:我走了
		name2:我走了
	*/
	$p1->say();
	$p2->say();
	$p3->say();
	$p1=null;

?>
时间: 2024-08-06 07:49:08

php 对象直接访问私有属性的相关文章

Java内存理解 &amp;&amp; 反射访问私有属性或方法

理解了内存,就理解了一切,就理解了各种各样的语言.所有的语言无非都是这样:局部变量分配内存永远在栈里面,new出来的东西分配内存永远是在堆里,静态的东西分配内存永远是在数据区.剩下的代码肯定是在代码区.所有的语言都是这样. 对于在API文档里面找某个类,如果一个类不用引入包就可以直接使用,那么这个类肯定是在java.lang这个包里. 接口是抽象方法(public)和常量值(public static final)的集合. 抽象类一定要有abstract关键字. Java反射之访问私有属性或方法

在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be closed first”

在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be closed first”. public class User { public long UserId { get; set; } public string UserName { get; set; } public string UserPwd { get; set; } public D

Java反射设置和访问私有属性值

越学习到后面,越感觉java反射机制很重要,必须精通,要不框架那块比较难自己动手实现,回过头温习一下反射机制,查漏补缺 今天尝试了一下通过反射访问和设置类的私有属性(不设置settesr和getters),比较容易理解,代码一贴就知道了 下面是po代码: package cn.liangqinghai.reflect; public class Beans1 { public Beans1(){ System.out.println("无参构造调用"); } public Beans1

js:私有变量和静态私有变量 | 访问私有属性

JavaScript基础对象创建模式之私有属性和方法(024)

JavaScript没有特殊的语法来表示对象的私有属性和方法,默认的情况下,所有的属性和方法都是公有的.如下面用字面声明的对象: var myobj = { myprop: 1, getProp: function () { return this.myprop; } }; console.log(myobj.myprop); // `myprop` is publicly accessible console.log(myobj.getProp()); // getProp() is publ

Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 注意点: self ,我们讲过了,self = 对象,实例化后的对象调用类的各种成员的时候的self就是这个对象. 而且我们也讲过了

C++私有成员变量被对象直接访问

C++访问控制: 关键字private,它描述了对类成员的访问控制.使用类的对象方法可以直接访问私有成员函数和变量.类的对象即实例只能通过公共成员函数来访问私有变量和私有成员函数.因此公有成员函数成为对象的私有变量访问的桥梁. 在c++中,在类的成员函数的参数为此类类型时,可以通过类类型的对象直接访问私有成员变量.或者在成员函数中使用临时对象来直接访问私有变量. class test { private: int a ; int b ; public: test(int x,int y) { a

Java中子类继承了父类的私有属性及方法吗?

最近学习继承,从书中看到子类继承父类,子类拥有父类所有的属性和方法,于是使用程序去验证,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,但是私有的方法似乎不能简单的访问,这里暂不考虑Java反射机制,于是我分析,子类不能继承父类私有的属性及方法,但是分析了内存后,我发现我是错的,在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象.所以所谓的继承使子类拥有父类所有的属性和方法

5、JavaScript高级之私有属性

学过java或者C++都知道,给对象声明一个私有属性使用private关键字就可以实现,但是在JavaScript中可不可以声明一个私有属性,答案肯定是可以的,你就相当于写了一句废话吧o(╯□╰)o. 在实现JavaScript的私有属性之前,先来看看一道百度的面试题: 实现一个对象,对象中有个私有属性,对象外部无法访问,但是可以通过接口实现设置和访问. 如果看过上一篇的<JavaScript高级之闭包>文章,那么很快就可以解决上面的面试题.没错,JavaScript的私有属性封装就是通过闭包