php隐式转换,PHP类的隐式类型转换?

有没有办法告诉php编译器我想要从一种类型到另一种类型的特定隐式转换?

一个简单的例子:

class Integer

{

public $val;

}

function ExampleFunc(Interger $i){...}

ExamFunc(333); // 333 -> Integer object with $val == 333.

[edit] …有人要求举一个例子.这是来自c#的示例.这是一种布尔类型,在访问一次后会更改值.

///

/// A Heisenberg style boolean that changes after it has been read. Defaults to false.

///

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,types

来源: https://codeday.me/bug/20191013/1908769.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值