__set() __get() _isset() __unset() 在__unset() 在类中没有事先声明和已经声明过的属性调用unset的区别
<?php
//echo strtr("I Love Mysql, Love PHP", "Mysql","MYSQL");
//$ar = array('Mysql'=>'MYSQL','PHP'=>'php');
//echo strtr("I Love Mysql, Love PHP", $ar); /*
class myClass
{ public static function autoload($className)
{
if(is_file($className.".class.php"))
{
require_once($className.".class.php"); }else{
echo "{$className}类文件不存在!";
} }
}
spl_autoload_register(array('myClass','autoload'));
$User = new User();
echo $User->getUserName();
echo "<BR><BR>";*/ class Base
{
private $UserName; private $Password; public function __get($key)
{
return $this->$key;
} public function __set($key, $val)
{
echo "key=={$key},val=={$val}<BR><BR>";
$this->$key = $val;
} public function __isset($key)
{
echo "<BR>===============call isset=============<BR>";
return isset($this->$key);
} public function __unset($key)
{
echo "<BR>===============call __unset=============<BR>";
unset($this->$key); }
} $base = new Base();
$base->UserName = "xlc";
$base->Password = "888888";
$base->age = 22;
echo "UserName:{$base->UserName}, Password:{$base->Password},age:{$base->age}<BR><BR>"; echo "<BR><h1>age</h1><BR>";
unset($base->age); //直接在类中没有声明的属性,在unset时,并不会调用魔术方法__unset()
if(isset($base->age)) //但__isset()是进行调用的
{
echo "存在";
}else{
echo "不存在";
}
echo "<BR>=======================<BR>"; echo "<BR><h1>Password</h1><BR>";
unset($base->Password);
if(isset($base->Password)) //如果在类中定义了该属性,这里会调用两次__isset();
{
echo "存在";
}else{
echo "不存在";
} echo "<BR><h1>UserName</h1><BR>";
unset($base->UserName);
if(isset($base->UserName))
{
echo "存在";
}else{
echo "不存在";
}
echo "<BR>=======================<BR>"; //echo isset($base->$name) ? "property is setted.<br>" : "property is not setted.<br>";
/*$key = "Userame";
//当属性已经存在的情况下就不走__isset()了这是为何?
//这里只有在$key为该对像已经定义的属性时才会调用__isset()魔术方法
if(isset($base->$key))
{
echo "属性存在";
}else{
echo "属性不存在";
}*/ ?>
__set() __get() _isset() __unset() 在__unset() 在类中没有事先声明和已经声明过的属性调用unset的区别的更多相关文章
- C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别
总结一下在非类中使用const关键字定义常量时的初始化问题,亲测VS2015.顺便记录#define宏和typedef的区别. 1 首先对const声明的常量的初始化做简单小结: , w2 = , w ...
- 第8.9节 Python类中内置的查看直接父类的__bases__属性
终于介绍完了__init__方法和__new__方法,接下来轻松一下,本节介绍类中内置的__bases__属性. 一. 语法释义 Python 为所有类都提供了一个 bases 属性,通过该属性可以查 ...
- Swift类中如何创建一个对外只读对内可读写的属性
很简单用private修饰符,后面跟限制关键字set: class Day{ private(set) var rawValue:Int = 0 func showRawValue(){ print( ...
- 解析C#类中的构造函数
<解析C#类中的构造函数> 一. C#中的构造函数概述: C#中类包含数据成员和函数成员.函数成员提供了操作类中数据的某些功能,包括方法.属性.构造器和终结器.运算符和索引器. 构造函数 ...
- PHP面向对象学习五 类中接口的应用
类中接口的应用 接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用 抽象类:1.类中至少有一个抽象方法.2.方法前需要加abstract 接口: 1.类中全部为抽象方法,抽象方法前不 ...
- Abstract和Virtual和interface , 派生类中重写 override / new关键字
http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html C#中Abstract和Virtual 在C#的学习中,容易混淆virtua ...
- org.apache.commons.lang3.StringUtils类中isBlank和isEmpty方法的区别
相信很多java程序员在写代码的时候遇到判断某字符串是否为空的时候会用到StringUtils类中isBlank和isEmpty方法,这两个方法到底有什么区别呢?我们用一段代码来阐述这个区别吧: @T ...
- 关于Test类中不能使用Autowired注入bean的问题
在测试类中使用AutoWired注解一直不能获取到Bean,调用方法时一直报空指针异常,我有在其他类中使用AutoWired试了下,发现能够生效.问题应该就是处在Test类中,后面找了半天终于找到问题 ...
- python---Django中模型类中Meta元对象了解
Django中模型类中Meta元对象了解 1.使用python manage.py shell 进入编辑命令行模式,可以直接进入项目(为我们配置好了环境) python manage.py shell ...
随机推荐
- go语言之进阶篇单向channel的应用 (生产者,消费者模型)
1.单向channel的应用 示例: package main import ( "fmt" ) //此通道只能写,不能读 func producer(out chan<- ...
- Libnids读书笔记 (转)
一.当日工作(或学习)内容及进展情况(以条目式陈述,必要时配图说明) Libnids读书笔记: Libnids(Library Network Intusion Detection System)网络 ...
- Word Search leetcode java
题目: Given a 2D board and a word, find if the word exists in the grid. The word can be constructed fr ...
- 为 hexo NexT 添加 Gitment 评论插件
Gitment 是作者imsun实现的一款基于 GitHub Issues 的评论系统. 支持在前端直接引入, 不需要任何后端代码. 可以在页面进行登录, 查看, 评论, 点赞等操作. 同时有完整的 ...
- Android传感器应用——重力传感器实现滚动的弹球
一. 问题描述 Android中有多达11种传感器,不同的手机设备支持的传感器类型也不尽相同 1. 重力传感器 GV-sensor 2. 加速度传感器 G-sensor 3. 磁力传感器 M-se ...
- 战斗bug技巧全攻略
程序员不是有一幅这样的对联吗 上联:一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然七点起床八点开会处理九个漏洞十分辛苦: 下联:十年编码九年加班八面无光忙的七窍生烟到头六亲不认五体投地依 ...
- 不能从const char *转换为LPCWSTR --VS经常碰到
不能从const char *转换为LPCWSTR 在VC 6.0中编译成功的项目在VS2005 vs2005.vs2008.vs2010中常会出现类型错误. 经常出现的错误是:不能从const ch ...
- Spring(十六):泛型依赖注入
简介: Spring4.X之后开始支持泛型依赖注入. 使用示例: 1.定义实体 package com.dx.spring.bean.componentscan; import java.io.Ser ...
- Unity3D 学习 创建简单的按钮、相应事件
选择file -->new project 然后保存到相应的地方 下面是这个刚创建的工程效果图. 然后创建一个C# Script ||定位到最左下角找到 assets --> creat ...
- iOS开发技巧 - 使用和定制开关控件(UISwitch)
1. 初始化加载到视图界面 (Swift) import UIKit class ViewController: UIViewController { // 1. create a property ...