PHP自定义对象转换

Jef*_*eff 4 php types casting class

我在PHP中有一个名为product的自定义类对象:

final class product
{   
    public $id;
    public $Name;
    public $ProductType;
    public $Category;
    public $Description;
    public $ProductCode;
}
Run Code Online (Sandbox Code Playgroud)

将此类的对象传递给我的数据访问层时,我需要将传递的对象转换为产品类的类型,以便我可以与该函数中的属性进行对话.由于PHP中的类型转换仅适用于基本类型,因此构建传递对象的最佳解决方案是什么?

final class productDAL
{
    public function GetItem($id)
    {
        $mySqlConnection = mysql_connect('localhost', 'username', 'password');
        if (!$mySqlConnection) { trigger_error('Cannot connect to MySql Server!'); return; }
        mysql_select_db('databaseName');
        $rs = mysql_query("SELECT * FROM tblproduct WHERE ID='$id';");
        $returnObject = mysql_fetch_object($rs, 'product');
        return $returnObject;
    }

    public function SaveItem($objectToSave, $newProduct = false)
    {
        $productObject = new product();
        $productObject = $objectToSave;

        echo($objectToSave->Name);
        $objectToSave->ID;

    }
}
Run Code Online (Sandbox Code Playgroud)

现在我正在创建一个新的对象强制转换为一种产品,然后将其设置为等于传递给该函数的对象.有没有更好的方法来完成这项任务?我会走错路吗?

编辑为CLARITY - 添加完整的PRODCUTDAL CLASS

Sjo*_*erd 9

您不需要转换对象,您可以像使用它一样使用它.

$name = $objectToSave->Name;
Run Code Online (Sandbox Code Playgroud)

  • 哦,一个欺骗Intellisense的好方法:`if(false)$ objectToSave = new product;`.加快开发速度,之后可以删除. (13认同)
  • 我赞成这个答案。但是有了这个答案,没有一个IDE会知道$ objectToSave是一个具有Name属性的产品。因此,IDE无法帮助您。使用非生产代码欺骗IDE以获得有用的智能感知应该是不必要的。真正的强制转换将使IDE知道类型,并提供更好的智能感知/自动完成功能。 (2认同)