首页 / PHP / PHP类的隐式类型转换?
PHP类的隐式类型转换?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP类的隐式类型转换?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1972字,纯文字阅读大概需要3分钟。
内容图文
有没有办法告诉php编译器我想要从一种类型到另一种类型的特定隐式转换?
一个简单的例子:
class Integer
{
public $val;
}
function ExampleFunc(Interger $i){...}
ExamFunc(333); // 333 -> Integer object with $val == 333.
[edit] …有人要求举一个例子.这是来自c#的示例.这是一种布尔类型,在访问一次后会更改值.
/// <summary>
/// A Heisenberg style boolean that changes after it has been read. Defaults to false.
/// </summary>
public class hbool
{
private bool value;
private bool changed = false;
public hbool()
{
value = false;
}
public hbool(bool value)
{
this.value = value;
}
public static implicit operator bool(hbool item)
{
return item.Value;
}
public static implicit operator hbool(bool item)
{
return new hbool(item);
}
public bool Value
{
get
{
if (!changed)
{
value = !value;
changed = true;
return !value;
}
return value;
}
}
public void TouchValue()
{
bool value1 = Value;
}
public static hbool False
{
get { return new hbool(); }
}
public static hbool True
{
get { return new hbool(true); }
}
}
[Test]
public void hboolShouldChangeAfterRead()
{
hbool b = false;
Assert.IsFalse(b);
Assert.IsTrue(b);
Assert.IsTrue(b);
hbool b1 = false;
Assert.IsFalse(b1);
Assert.IsTrue(b1);
Assert.IsTrue(b1);
hbool b2 = true;
Assert.IsTrue(b2);
Assert.IsFalse(b2);
Assert.IsFalse(b2);
bool b3 = new hbool();
Assert.IsFalse(b3);
Assert.IsFalse(b3);
Assert.IsFalse(b3);
}
解决方法:
长答案:
我认为在这种情况下,PHP很难进行隐式转换.
请记住:您将类称为Integer的事实对代码的读者来说是一个提示,PHP不理解它实际上是用于保存整数的.此外,它具有名为$val的属性的事实也向人类读者暗示了它可能应该包含整数的值.同样,PHP不理解您的代码,仅执行它.
在代码的某些时候,您应该进行显式转换. PHP可能为此提供了一些不错的语法糖,但是第一次尝试将是这样的:
class Integer
{
public $val;
function __construct($val) { $this->val = $val; }
}
function ExampleFunc($i){
if (is_numeric($i)) { $iObj = new Integer($i); }
...
}
ExamFunc(333); // 333 -> Integer object with $val === 333.
这并不像您想要的那样酷,但是同样,PHP可能具有一些语法糖,它将或多或少地隐藏显式转换.
简洁版本:
无论哪种方式,您都需要进行显式转换
内容总结
以上是互联网集市为您收集整理的PHP类的隐式类型转换?全部内容,希望文章能够帮你解决PHP类的隐式类型转换?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。