• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP幻术方法小结1

php 搞代码 4年前 (2022-01-24) 14次浏览 已收录 0个评论

PHP魔术方法小结1
PHP中除了有大量的魔术变量外,还有很多_开头的魔术方法,本文简单小结下:

1 _construct 和_destruct就不说了,构造和析构.

2 _call和_callStatic
例子:
<?php
class myClass() {
private $a = true;
}

$myObj = new myClass();
$myObj->showValue();

?>
这里会说出错,那当然的,没定义.可以用
<?php
class Greetings {
function __call( $functionName, $argumentsArray ) {
echo “Hello, ” . ucfirst( $functionName ) . ” !!!”;
}
}
$sayHello = new Greetings();
_CALL会在调用没有定义任何方法时触发

还有_callStatic
<?php
class Greetings {
static function __callStatic( $functionName, $argumentsArray ) {
echo “Hello, ” . ucfirst( $functionName ) . ” !!!”;
}
}

Greetings::steve();

3 _set和_get
这个是强制在类中声明的变量才能被使用,一个例子:
<?php
class myClass {
private $onlyDataMember = 0;
}
$classObj = new myClass();
$classObj->undefinedDataMember = ‘Some Value’;
echo $classObj->undefinedDataMember;
?>
这个是直接输出了没定义的值,不大好,可以改成这样,强制性地:
<?php
class myClass {
private $onlyDataMember = 0;

function __set( $dataMemberName, $dataMemberValue ) {
throw new Exception( “Object property $dataMemberName is not writable!” );
}

function __get( $dataMemberName ) {
throw new Exception( “Object property $dataMemberName is not defined!” );
}
}

再来一个例子:
class UserInfo2{

private $aData = array();

}

$oUserInfo2 = new UserInfo2;

$oUserInfo2->aData[‘UserName’] = ‘木目子’;

$oUserInfo2->aData[‘PassWord’] = ‘123456’;

$oUserInfo2->aData[‘Birthdat’] = ‘1978-08-16’;

echo “用户名:”.$oUserInfo2->aData[‘UserName’] .”
\n”;

echo “密 码:”.$oUserInfo2->aData[‘PassWord’] .”
\n”;

echo “生 日:”.$oUserInfo2->aData[‘Birthday’] .”
\n”;

显然,这段代码会出错的,因为aData是UserInfo的私有属性,不能直接在外部使用,那现在问题是必须要给aData进行付值,这个时候__set和__get就排上用场了:

class UserInfo3{

//private $aData = array();

private $aData = array();

function __set($property,$value){

$this->aData[$property] = $value;

}

function __get($property){

return $this->aData[$property];

}

}

$oUserInfo3 = new UserInfo3;

$oUserInfo3->aData[‘UserName’] = ‘木目子’;

$oUserInfo3->aData[‘PassWord’] = ‘123456’;

$oUserInfo3->aData[‘Birthdat’] = ‘1978-08-16’;

echo “用户名:”.$oUserInfo3->aData[‘UserName’] .”
\n”;

echo “密 码:”.$oUserInfo3->aData[‘PassWord’] .”
\n”;

echo “生 日:”.$oUserInfo3->aData[‘Birthday’] .”
\n”;

$classObj = new myClass();
$classObj->undefinedDataMember = ‘Some Value’;
echo $classObj->undefinedDataMember;

?>
这样当调用的时候,就强制报错了

4) _invoke
把对象当函数用,典型的例子为,平常我们一般这样用:
<?php
class myDbUsersClass {
private $recordsArray = array();

function __construct( $fetchThisMuchUsers ) {
// code for fetching $fetchThisMuchUsers number of records from database and store them to $recordsArray.
}

function getUsers() {
return $recordsArray;
}
}

$classObj = new myDbUsersClass( 10 );
$users = $classObj->getUsers();
foreach( $users as $user ) {
echo $user[ ‘userName’ ] . ‘
‘;
}
?>
现在可以这样用:
<?php
class myDbUsersClass {
private $recordsArray = array();

function __construct( $fetchThisMuchUsers ) {
// code for fetching $fetchThisMuchUsers number of records from database and store them to $recordsArray.
}

function __invoke( $onlyArgumentItAccepts ) {
return $recordsArray;
}
}

$classObj = new

+本文来源gao!%daima.com搞$代*!码9网(

搞gaodaima代码 myDbUsersClass( 10 );
foreach( $classObj() as $user ) {
echo $user[ ‘userName’ ] . ‘
‘;
}
?>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP幻术方法小结1

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址