class test
{
function __construct()
{
$getargs=func_get_args();
if(count($getargs)<2)
exit("参数必须有二个");
}
function mydo()
{
echo "手动爆一次";
}
}
$newObj = new test("aaa"); //构造函数中$getargs[0] 的值就是aaa
$newObj->mydo();
class data
{
function __call($name,$arguments)
{
//$name代表方法名 $arguments代表参数
if($name=="getSqlServer")
{
// 执行sqlserver相关的sql语句
}
else
{
//执行mysql相关的sql语句
}
}
}
$newObj = new data();
$newObj->getSqlServer("select top 10 * from table1");
$newObj->getMysql("select * from table1 limit 0,10");//注意mysql是没有 top n的语法的
class data
{
function __get($name) //$name 代表属性名
{
if($name=="H7N9") //变量为H7N9没有定义它,则调用__get,定义了,则不会进入
return "禽流感";
else
return "不要扯淡";
}
}
$newObj = new data();
echo $newObj->H7N9;
echo $newObj->H100N30;
用这个办法,依然可以写出很亮的代码 (六)、__clone()
当对象被克隆时,执行的函数
class data
{
var $myname="shenyisyn";
function __clone()
{
$this->myname="假的shenyisyn";
}
}
$newObj = new data();
echo $newObj->myname;
$obj2=clone $newObj;
echo $obj2->myname;
class news
{
var $newsid=1;
function __clone()
{
//在数据库中执行 ID为1的新闻,让其被引用或者采集字段加+1
}
}
$newObj = new news();
$news2=clone $newObj;//终于有外站用户来采集我站新闻了,我好欢喜
(七)、__toString()
用法看例子直接明了
class news
{
var $newstitle="美国国务卿克里抵京访华";
function __toString() //不加这个函数,则会出现 对象无法按字符串输出
{
return "这是一个新闻对象,我只能给你一个标题";
}
}
$newObj = new news();
echo $newObj; //额。。手误了,忘记这货不是一个字符串,不过照样可以爆出来
(八)、__sleep、 __wakeup
这个函数只在类被序列化或者反序列化时自动调用。看
class news
{
var $user1="卞工";
var $user2="猪刚烈";
var $user3="学姐";
function __sleep()
{
echo "学姐是保密的,不会让你序列化";
return array("user1","user2");//user1和user2 必须和上面定义的变量名是一致的。
}
}
$newObj = new news();
$obj=serialize($newObj);
var_dump($obj);