首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从未初始化的类型化属性中查找类型

从未初始化的类型化属性中查找类型
EN

Stack Overflow用户
提问于 2021-10-15 05:08:02
回答 2查看 307关注 0票数 1

我的User类中有以下代码:

代码语言:javascript
运行
AI代码解释
复制
class User {
    
    public int $id = 0;
    public string $code;
    public string $name;
}

在从数据库中分配$code时,我需要先找出var的类型,然后才能将它赋值,所以我在__construct函数中使用了User

代码语言:javascript
运行
AI代码解释
复制
foreach($data as $key => $val) {
    settype($val, gettype($this->$key));
    $this->$key = $val;
}

但是,它返回此错误:

致命错误:未登录错误:类型化属性用户::$code在初始化之前不能访问

我理解错误信息的含义。

有没有办法在变量设置之前找出变量的类型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-15 05:28:44

我不知道你到底想做什么,如果你不知道更多的事情,我就不会冒险对它的逻辑提出意见。

撇开这一点不说,在未初始化的类型化属性上使用gettype()是行不通的,因为该属性在这一点上实际上没有任何值。

但是,由于属性是键入的,所以可以通过反射获得属性定义的类型:

代码语言:javascript
运行
AI代码解释
复制
class User {
    
    public int $id = 0;
    public string $code;
    public string $name;
    
    public function __construct() {
        
        $reflect = new ReflectionClass($this);
        $props   = $reflect->getProperties();
        foreach ($props as $prop) {
            echo $prop->getType()->getName(), "\n";            
        }

    }
}

new User();

以上将是输出

代码语言:javascript
运行
AI代码解释
复制
int
string
string

在飞行中这样做似乎需要大量的开销,所以请确保没有更好的工具可供您使用。在__construct()方法上做这样的事情乍一看并不明智,但我当然不知道您的具体约束。

票数 1
EN

Stack Overflow用户

发布于 2021-10-15 05:28:56

如果您将变量创建为

代码语言:javascript
运行
AI代码解释
复制
$foo;

然后它是null,直到它被成功初始化,所以它没有类型。

如果它是一个类型化的属性,那么它仅仅是未初始化的,而不是空的。,我的回答的其余部分包含了一些基于评论部分收到的信息进行的实验。因此,在初始化变量或属性之前,变量或属性是null,但类型化属性除外,这些属性都是未初始化的。

在注释部分,有人建议未初始化的变量不等于null。所以我写了这个测试代码:

代码语言:javascript
运行
AI代码解释
复制
<?php

$foo;
echo var_dump($foo === null);

并执行了

它给出一个警告并计算为true,因此未初始化的变量确实是null

自从伊维指出这个问题是指一项财产之后,我又进行了另一项实验:

代码语言:javascript
运行
AI代码解释
复制
<?php

class Foo {
        public $foo;
        public function __construct() {
            echo var_dump($this->foo === null);
        }
}

new Foo();

结果是

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69585227

复制
相关文章
C语言__attribute__ ((constructor))和__attribute__ ((destructor))
一、gcc为函数提供了几种类型的属性,其中包含:构造函数(constructors)和析构函数(destructors),可带优先级。
IT工作者
2022/05/20
2.1K0
浅谈 __attribute__
__attribute__ 是一个编译器指令,其实是 GNU C 的一种机制,本质是一个编译器的指令,在声明的时候可以提供一些属性,在编译阶段起作用,来做多样化的错误检查和高级优化。用于在 C、C++、Objective-C 中修饰变量、函数、参数、方法、类等。
s_在路上
2019/03/08
5.9K0
iOS_ __attribute__
__attribute__ 编译器属性机制,用于向编译器描述特殊得标识、检查或优化。 语法关键字是__attribute__紧跟2套圆括号,括号内是一个以逗号分隔的属性列表。 __attribute__指令被放在类前、函数/变量声明后面。
mikimo
2023/10/18
2860
常用的gcc的__attribute__
当我学习brpc。浏览代码,查看许多“ __attribute__使用过的地方”。
mariolu
2021/03/29
2.1K0
__attribute__机制介绍
__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)
阳光岛主
2019/02/19
3K0
使用GDAL/OGR读写矢量文件
感觉GIS中矢量相关内容还是挺庞杂的,并且由于版本迭代的关系,使用GDAL/OGR读写矢量的资料也有点不太一样。这里总结了一个读写矢量的示例,实现代码如下:
charlee44
2019/09/29
1.3K0
使用GDAL/OGR读写矢量文件
弱符号__attribute__((weak))
弱符号是什么? 弱符号: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号。当有函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号。弱符号也称为weak alias(弱别名)。 attribute((weak))的作用 情况是这样的,碰到一个棘手的问题:我们不确定外部模块是否提供一个函数func
233333
2018/07/05
6.6K0
iOS小技能:__attribute__的应用
LLVM和其他 GCC 特性一样,Clang 支持了 __attribute__, 还加入了一小部分扩展特性。
公众号iOS逆向
2022/08/22
3560
iOS小技能:__attribute__的应用
使用Fiona创建Shapefile矢量数据
使用Fiona写入Shapefile数据,主要是构建一个Schema,然后将空间对象转为GeoJSON的形式进行写入。
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.7K0
C语言之——__attribute__
__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关 。
用户4645519
2020/09/07
1.1K0
属性“__attribute__”在Objective-C中的应用
      关于__attribute__,你可能用的不多,但是一定经常见到,在系统的Foundation框架中,__attribute__的使用非常频繁。首先,__attribute__用于在函数,变量或类型声明时进行特殊属性设置的编译器指令。需要注意,它是一种编译器指令,这也就表明了使用它我们可以做更高级的检查与优化功能。
珲少
2020/04/28
2.4K0
属性“__attribute__”在Objective-C中的应用
[译] 在 Android 应用中使用矢量资源
在之前的文章中,我们研究了 Android 的 VectorDrawable 图像格式以及它能够实现的功能:
Android 开发者
2019/05/14
1.5K0
iOS 编译器__Attribute__的入门指南
作者:小朋鸟 一、Attribute Attribute 是 GNU C 的一大特色。 所以这对于iOS来说这是一个什么东西? 这是一个可以给对象或函数声明特性的编译器指令,目的是让编译器做更多的错误检查和优化。 可设置函数属性(Function Attribute)、变量属性(Variable Attribute)、类型属性(Type Attribute) Swift 文档中的说明: Attributes provide more information about a declaration or ty
37手游iOS技术运营团队
2021/12/31
9870
iOS 编译器__Attribute__的入门指南
矢量数据的处理
  矢量数据就是点、线、面和注记,不能是栅格,也不能是TIN等数据,矢量数据的处理和分析基本原理如下。
小孙同学
2022/01/17
2.1K0
矢量数据的处理
geotrellis使用(八)矢量数据栅格化
目录 前言 栅格化处理 总结 参考链接 一、前言        首先前几天学习了一下Markdown,今天将博客园的编辑器改为Markdown,从编写博客到界面美观明显都清爽多了,也能写出各种样式的东西了,有关Markdown,网上内容很多,暂且不表,开始进入今天的主题。        前几天碰到一个任务,需要将矢量数据导入到Accumulo中,然后通过geotrellis进行调用。这一下又犯难了,之前处理的全是raster数据,通过ETL类可以直接进行导入生成金字塔等,如何将矢量数据导入平台之前未曾碰到,
魏守峰
2018/04/28
1.8K0
geotrellis使用(八)矢量数据栅格化
#define sec(x) __attribute__((section(#x),used))
#define sec(x) __attribute__((section(#x),used))
心跳包
2020/08/31
1.6K0
#define sec(x) 			__attribute__((section(#x),used))
矢量函数
一个由三个变量组成的函数w = f(x,y,z)表示如何根据x,y,z来确定w的值。从几何角度更有利于对这个概念的理解:在空间笛卡尔坐标系下取一点,坐标为(x,y,z),函数w = f(x,y,z)告诉我们如何将一个点和一个数联系起来。例如:一个函数T(x,y,z)可以表明空间任意一点的温度。 以上提到的函数f(x,y,z)和T(x,y,z)是标量函数,即在函数T(x,y,z)中给x,y,z赋值得到的结果是温度,温度是标量。矢量函数的一般形式简单明了。在三维空间中的一个矢量函数是一个将每个点(x,y,z)和
fem178
2018/04/08
3.8K0
矢量函数
osgEarth使用笔记4——加载矢量数据
前面文章加载的底图数据是一种栅格数据,还有一种很重要的地理信息表现形式是矢量数据。在osgEarth中,这部分包含的内容还是很丰富的,这里就总结一二。
charlee44
2020/10/10
3.4K2
osgEarth使用笔记4——加载矢量数据
python中使用矢量化替换循环
所有编程语言都离不开循环。因此,默认情况下,只要有重复操作,我们就会开始执行循环。但是当我们处理大量迭代(数百万/十亿行)时,使用循环是一种犯罪。您可能会被困几个小时,后来才意识到它行不通。这就是在 python 中实现矢量化变得非常关键的地方。
程序那些事儿
2023/03/07
1.7K0
python中使用矢量化替换循环
编译器特性 _attribute__((packed))
从BLE(低功耗蓝牙)设备上收到数据(16进制的数据流),<840100ec d5045715 00010014 00240018 00>,17个bytes(字节),然后我定义了一个结构体去接数据:
iOS Development
2019/02/14
2.6K0

相似问题

英特尔自动矢量法旅行计数解释?

21

使用__attribute__和typedef

15

__attribute__((包装))和__attribute__((__packed__))

10

关于使用__attribute__(格式(Printf)

11

如何使用__attribute__((visibility(“default”)?

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文