这个魔术方法(magic method),本质上是把一个Object转为String,其实是可以是override,实现自己的逻辑的。

补充解释一下
为什么写这个没头没脑的文章呢?
我今天在用一个PHP的JWT的库,https://github.com/lcobucci/jwt
就先不说里面的一个配置没有文档容易写错吧,就说返回值:

use Lcobucci\JWT\Builder;

$token = (new Builder())
->setIssuer('http://example.com') // Configures the issuer (iss claim)
->setAudience('http://example.org') // Configures the audience (aud claim)
->setId('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a header item
->setIssuedAt(time()) // Configures the time that the token was issued (iat claim)
->setNotBefore(time() + 60) // Configures the time that the token can be used (nbf claim)
->setExpiration(time() + 3600) // Configures the expiration time of the token (exp claim)
->set('uid', 1) // Configures a new claim, called "uid"
->getToken(); // Retrieves the generated token

$token->getHeaders(); // Retrieves the token headers
$token->getClaims(); // Retrieves the token claims

echo $token->getHeader('jti'); // will print "4f1g23a12aa"
echo $token->getClaim('iss'); // will print "http://example.com"
echo $token->getClaim('uid'); // will print "1"
echo $token; // The string representation of the object is a JWT string (pretty easy, right?)

就说上面这个$token,其他的库,不是直接返回一个String吗?他不,他非要返回一个Token object,这不傻逼么?就算这代码也暗示了这是一个object,怎么从这个object里获取token string也是没写文档。我折腾半天,才发现强制cast,要这样(string)$token才算可以,他的__toString()魔术方法的逻辑是返回了jwt token string。

所以你就感觉这些库,真的思维太奇葩了,有够傻逼的。

当然,我水平也比以前强了,能看源代码把这个文档上没有的东西搞明白了。

标签: PHP, jwt, 魔术方法

添加新评论