php传入对象时获得类型提示(类约束)

转:https://blog.csdn.net/baidu_30000217/article/details/49666647

类的类型提示 - 将类名放在需要约束的方法参数之前

语法格式:

public function write(ShopProduct $shopProduct){}

数组提示:

public function setArray(array $storearray){}

class ShopProduct{
    public $title = ‘default product‘;      // 属性也称为成员变量,用来存放对象之间互不相同的数据
    public $producerMainName = ‘main name‘;
    public $producerFirstName = ‘first name‘;
    public $price = 0;

    // 创建对象时,构造方法会被自动调用,构造方法可以确保必要的属性设置,并完成任何需要准备的工作
    public function __construct($title,$producerMainName,$producerFirstName,$price){
        $this->title = $title;      // 使用伪变量$this给每个变量赋值
        $this->producerMainName = $producerMainName;
        $this->producerFirstName = $producerFirstName;
        $this->price = $price;
    }

    public function getProducer(){  // 方法让对象执行任务
        return $this->producerMainName . $this->producerFirstName;
    }
}

class ShopProductWriter{
    public function write(ShopProduct $shopProduct){    // 类的类型提示,只需将类名放在需要约束的方法参数之前
        $str = $shopProduct->title . ‘:‘ . $shopProduct->getProducer() . "($shopProduct->price) . </br>";
        print $str;
    }

    public function setArray(array $storearray){        // 数组提示
        var_dump($storearray);
    }

    public function setWriter(ObjectWriter $objectWriter=null){
        var_dump($objectWriter);
    }
}

class Wrong{};
$store = array(‘name‘=>‘taobao‘);
$objectWriter = NULL;

$product1 = new ShopProduct(‘My Antonia‘,‘Willa‘,‘Cather‘,5.99);    // 更易于实例化,也更安全,实例化和设置只需要一条语句就可以完成,任何使用ShopProduct对象的代码都可以相信所有的属性皆被初始化了
$writer = new ShopProductWriter();
$writer->write($product1);        // 有了参数提示,规定此处只能传入new ShopProduct对象
$writer->write(new Wrong());     // 传入其它的对象会出现:Catchable fatal error: Argument 1 passed to ShopProductWriter::write() must be an instance of ShopProduct, instance of Wrong given..从而防止隐藏bug的产生。
$writer->setArray($store);        // 有了参数提示,规定此处只能传入一个数组
$writer->setWriter($objectWriter); // 有了参数提示,规定此处只能传入NULL

原文地址:https://www.cnblogs.com/jimz/p/9393664.html

时间: 2024-10-23 16:47:01

php传入对象时获得类型提示(类约束)的相关文章

php传入对象时获得类型提示

类的类型提示 - 将类名放在需要约束的方法参数之前 语法格式: public function write(shopProduct $shopProduct){} 数组提示: public function setArray(array $storearray){} class ShopProduct{ public $title = 'default product'; // 属性也称为成员变量,用来存放对象之间互不相同的数据 public $producerMainName = 'main

记一次踩坑 Gson转换map对象时 Integer类型自动转换成Double类型

之前一直使用json转换map对象,因为公司统一使用gson,我按照网上转换map对象的方式转换: Map<String, Object> params = gson.fromJson(gson.toJson(payMentResultDto), Map.class); 结果对象里Integer类型自动变成double类型... 解决办法: 网上大致有俩种,1.修改源码(能力达不到)2.增加适配器 我找了一下,解决办法有俩种(比较实用) 1.网上看到的(自定义类型适配器),亲测可用 //这俩段

PEP 484 类型提示 -- Python官方文档译文 [原创]

英文原文:https://www.python.org/dev/peps/pep-0484/ 采集日期:2019-12-27 PEP 484 -- 类型提示(Type Hints) PEP: 484 Title: Type Hints Author: Guido van Rossum <guido at python.org>, Jukka Lehtosalo <jukka.lehtosalo at iki.fi>, ?ukasz Langa <lukasz at pytho

序列化类型为“System.Data.Entity.DynamicProxies...&quot;对象时检测到循环引用

这是因为EF外键引起的序列化问题. 解决方案: context.Configuration.ProxyCreationEnabled = false; 这里我用的是一个基类控制器用于被继承 返回EF实例前加上这段代码就可以了 1 //用于被继承 2 public class BaseController : Controller 3 { 4 public CucuCarEntity db 5 { 6 get 7 { 8 //从当前线程中获取该对象 9 CucuCarEntity db = Cal

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---> System.InvalidOperationException: 生成 XML 文档时出错. ---> System.InvalidOperationException: 序列化类型 Web

[菜鸟]C++创建类对象时(无参)后不加括号与加括号的区别

在不考虑用new动态创建对象的情况下,用最普通的 类名 对象名(参数); 的方法创建对象 先贴上最正常最普通的代码 #include<iostream> using namespace std; class C{ public: C(){ cout<<"Hello C++\n"; }; C(int m){ cout<<"I love C++\n"; }; private: int n; }; int main(){ C c; re

实现在GET请求下调用WCF服务时传递对象(复合类型)参数

WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法>.<实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法>,在此就不作重述. 实现WCF支持HTTP请求调用容易,但要实现类似MVC的ACTION及WEB API那样的灵活,那就得花费点功夫,为什么这样说

在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法

在MVC中返回JSON时出错,序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用. public ActionResult GetSdirsbyFdirid(int id) { // db.Configuration.LazyLoadingEnabled = false; db.Configuration.ProxyCreationEnabled = false; List<Seconddirectory> lis

共享文件时提示“将安全性信息应用到以下对象时发生错误”

在给某文件夹设置用户权限时发生错误,提示”将安全性信息应用到以下对象时发生错误”,点击继续其它子文件及文件夹依然如此. 故障如图: 解决方法: 1.右键打开文件夹的属性,在弹出选项卡中,单击“安全”选项卡,选择“高级”,然后选择“所有者”选项卡. 2.在“名称”列表中,单击你的用户名,如果是作为管理员登录的,请单击“Administrator”,或者单击“Administrators”组. 3.单击以选中“替换子容器及对象的所有者”复选框.4.单击“确定”,等到属性应用完就可以正常添加权限了.