随着PHP8的发布,作为动态类型语言的PHP也有了更大的进步。 此处浅谈一下PHP8中的类型定义以及几个新特性 本文仅介绍重点,详细内容可以参考 PHP 官方。 数据类型 (Data Type) 数据类型 (Data Type) 用来表示储存的数据类型,也称为型别。 但动态类型程序语言最令人诟病的地方就是过度方便新手开发人员 (可以不理会类型),而苦了 Web Server (需要判别类型),也容易造成开发人员因为类型问题产生的语意BUG。 开发人员预先定义好数据类型,可以有效增加程序运行效率。PHP 7.0 起,允许在 function 内约束自变量类型、返回值类型。PHP8起,允许在 function 内约束复合类型。 object{ //do something } 范例:复合类型,PHP8后允许自变量、返回值有复合类型。
一,结构体类型的声明 1.结构体的声明 struct tag //结构体类型名 { member-list; //结构体成员 }; //分号不能丢 2,结构体类型的创建和初始化 下面这种为匿名创建 struct { char name[20];//姓名 int age;//年龄 char sex[5];//性别 }s; 这是一个匿名结构体类型 vs中默认为8. 3,结构体的总大小为最大对齐数(每个成员都有一个对齐数,所有对齐数中最大的)的整数倍。
# 一、定义 props 类型 第一种方式无法自动推断出类型 <script setup lang="ts"> defineProps(['id', 'title', 'price', 'isStock 使用 TypeScript 的方式定义 <script setup lang="ts"> // 使用 interface 定义 interface Product { id: number, # 二、使用 withDefaults,给 props 定义默认值 <script setup lang="ts"> // 使用 interface 定义 interface Product { { title: '默认标题', price: 100, isStock: true, }) </script> # 总结-写在最后 说明 vue 不支持使用外部导入进来的类型限制 ,比如通过 import 这种导入进来的不行,必须定义在内部
# 一、定义 ref 类型的三种方式 自动推断 <script setup> import { ref } from 'vue' const num = ref(0) </script> 2. 显示定义类型(需要导入 Ref) <script setup> import { ref, Ref } from 'vue' const str: Ref<string> = ref('str') < setup> import { ref } from 'vue' const bool = ref<boolean>(true) </script> # 总结-写在最后 说明 ref 和 reactive 定义类型是一样的
一、定义 emits 类型&原生 DOM 元素类型 定义自定义触发事件(调用签名) const emit = defineEmits<{ (e: "事件名字"): void (e: " 事件名字"): void (e: "事件名字", 传递字段名: 类型): void }>() // 获取 DOM 元素的时候需要进行强制转换类类型 function sendEmit() { emit('事件名字', 传递单数) } 强制转换 DOM 类型(DOM 类型查看文档) const emit = defineEmits<{ (e: "事件名字"): void (e: "事件名字"): void (e: "事件名字", 传递字段名: 类型): void }>() // 获取 DOM 元素的时候需要进行强制转换类类型 function sendEmit const value = (e.target as HTMLSelectElement).value // 这里获取到的是 true 或 false emit('事件名字', 字段名: 类型
在C语言中数据类型分为内置类型(int,char等)和自定义类型(数组,结构体,联合体,枚举),所以结构体是自定义类型之一。那为什么会有结构体呢? 2 结构体的声明 结构体的说明相当于我们声明一个整型类型int一样规定了其存放的是整型类型,即结构体的说明规定了这个自定义类型中可以存放什么数据。 4 结构的特殊声明【匿名结构体类型】 4.1 定义:在声明结构的时候,可以不完全的声明即把结构体标签省略掉。 :就是我们如果使用匿名的结构体类型,如果没有对结构体类型重命名的话,只能使⽤⼀次,即我们只能定义s1这一个结构体变量。 2.3嵌套结构体的对⻬类型 题目分析:先分析一下s2占16个字节,再分析s1,a占一个字节,因为struct s2 s的字节数为16,而其最⼤对⻬为8,所以从第8个字节开始存放,接着再存放i。
# 一、provide / inject 类型定义 # 定义 provide 值的类型 import {InjectIonKey } from 'vue' // 使用 Symbol() 来定义key 因为他不能被重复定义 export default const Theme = Symbol() as InjectIonKey<值的类型> # 传递 provide 值 <script setup lang ts"> import Theme from 'Theme.js' provide(Theme, '需要传递的值') </script> # 接收 inject 值 因为 Symbol 不允许被重复定义 theme = inject(Theme) # 二、第二种方式定义 provide('title', '这是我需要传递的内容') // 此时因为传递和接收在不同的文件,无法自动判断出是啥类型,默认是 unknown const title = inject('title') // 可以使用泛型来指定类型 cosnt title = inject<string>('title')
一 ⾃定义类型:联合 1 联合体类型的声明/定义/赋值 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。 下面我们来看一个题目 为什么union Un1的结果是8呢? 5 联合的⼀个练习(大小端的判断) 二 ⾃定义类型:枚举 枚举顾名思义就是⼀ 列举,把可能的取值⼀ 列举。 2 枚举类型的优点 为什么使⽤枚举? 我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举? 枚举的优点: 1. 增加代码的可读性和可维护性 2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。 3. 便于调试,预处理阶段会删除 #define 定义的符号 4. 使⽤⽅便,⼀次可以定义多个常量 5.
结构的每个成员可以是不同类型的变量。 struct Node { int data; struct Node* next;//结构体指针的大小是4/8个字节 }; 变成指针后,结构体的大小就固定可算了,详细知识涉及到数据结构链表的知识, 注:对齐数 = 编译器默认的一个对齐数与该成员大小的较小值(VS默认的对齐数是8) 3.结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍 4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处 枚举类型的定义 枚举的优点 1.增加代码的可读性和可维护性 2.和#define定义的标识符比较枚举有类型检查,更加严谨 3.防止了命名污染 4.便于调试,使用方便,一次可以定义多个常量 枚举类型的大小就是一个整形的大小 所占空间大小是5个字节 int i;//对齐数是4 }; int main() { union Un u; printf("%d\n", sizeof(u)); return 0; } 运行结果:8
一、template 的 ref 类型定义
,你也可以在别的地方定义这个变量,因为你已经创建了一个新的类型,一个新的结构体类型 2.如何使用结构体类型 创建完了一个结构体类型,那我们应该这样去使用这个结构体类型呢? ,你也可以在别的地方定义这个变量,因为你已经创建了一个新的类型,一个新的结构体类型 int main() { struct abc a1 = { 20,'b',5.2 };//按顺序初始化结构体 / ,你也可以在别的地方定义这个变量,因为你已经创建了一个新的类型,一个新的结构体类型 int main() { struct abc a3 = { .a = 60,.c = 9.9,.b = 'a' } 二、枚举类型 1.枚举类型的定义 #include<stdio.h> enum sex { male, female, no };//这里就定义了一个关于性别的枚举类型,它会按照从0开始的顺序给male 使用方便,一次可以定义多个常量 三、联合体类型 1.联合体类型的定义 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
02定义 1、串(string)(或字符串)是由零个或多个字符组成的有限序列。 2、零个字符的串称为空串,它的长度为零。 3、串中任意个连续的字符组成的子序列称为该串的字串。
前言 与结构体类似,联合体也是一个自定义类型,大家或许在某些地方发现相同之处,二者可以相互借鉴,但不能混淆在一起哦~ ,枚举与二者都不同,敬请期待~ 联合体类型的声明 像结构体⼀样,联合体也是由⼀个或者多个成员构成 ,这些成员可以不同的类型。 #include <stdio.h> //联合类型的声明 union Un { char c; int i; }; int main() { //联合变量的定义 union Un un = { enum Color//三原色 { RED=2, GREEN=4, BLUE=8 }; 看到这,有人可能会想到我们之前学习过的 #define宏定义,它与枚举有什么区别或者优劣呢? 和#define定义的标识符⽐较枚举有类型检查,更加严谨。 3. 便于调试,预处理阶段会删除 #define 定义的符号 4. 使⽤⽅便,⼀次可以定义多个常量 5.
02 定义 1、串(string)(或字符串)是由零个或多个字符组成的有限序列。 2、零个字符的串称为空串,它的长度为零。 3、串中任意个连续的字符组成的子序列称为该串的字串。
如下代码: void main() { int a=1;// 定义了一个整型变量,取名为a, 并赋值为1 (强数据类型语言) int b=3;// 定义了一个整型变量,取名为b, 并赋值为 变量的数据类型 每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(使用字节多少表示)。 1byte = 8bit [二进制再详细说, 简单举例一个 short 3 和 int 3 ] short 3 在内存中占有 2字节 int 3 在内存中占有 4个字节 浮点类型 基本介绍 C语言的浮点类型可以表示一个小数 ,比如 123.4 , 7.8 , 0.12等等 浮点类型 类型 存储大小 值范围 精度 float 单精度 4 字节 1.2E-38 到 3.4E+38 6 位小数 double 双精度 8 字节 2.3E 1100001)——>码值(97)——> 字符’a’——>读取(显示) 字符和码值的对应关系是通过字符编码表决定的(是规定好) 布尔类型 基本介绍 C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以
前言:通过前文,我们系统学习了结构体的相关知识,深入理解了自定义类型的概念与实践,承接上文,我们将继续学习新的自定义类型:联合和枚举。 比如: #include <stdio.h> union Un1 { char c[5]; //1 8 1 int i; // 4 8 4 }; union Un2 { short c[7]; //2 8 2 int i; // 4 8 4 }; int main() { //下面输出的结果是什么? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> // 定义商品类型常量(方便识别) #define TYPE_BOOK 和#define定义的标识符相⽐较,枚举有类型检查,更加严谨。 ③. 便于调试,预处理阶段会删除 #define 定义的符号 ④. 使⽤⽅便,⼀次可以定义多个常量 ⑤.
这种“边缘计算”定义涉及在网络边缘发生的环境、设备和流程。什么是网络边缘?网络边缘指的是本地网络或其设备与互联网交互的位置,即触及互联网的外部边界。 在边缘计算架构中,不同类型的设备都可以在网络边缘上运行。常见的边缘计算示例包括物联网(IoT)设备。这些设备可以是从烤面包机到冰箱、智能手表以及工厂车间使用的扫描仪等。 边缘计算的类型边缘计算有多种类型,企业可以根据其计算需求或产品需求指定一种或多种类型的边缘计算。一些边缘计算设计用于处理基本事件,而另一些则适合处理更复杂的流程。
# 定义 ts 类型(自动推断) 需要注意的是 TypeScript 类型都是小写的,要和 JavaSctipt 里面的构造函数区分开来 // 这种是隐式类型的定义,后面第一次赋值的是啥类型他就是啥类型 let productName = '纯棉 T 恤' // 当我们给他定义好了类型,后面在使用这个数据的时候,就可以自动判断出它里面有那写方法 // 如: productName.price() // 当我们定义好了类型以后,再给他赋值其他类型的数据就会报错 productName = 12 // 报错 隐式定义类型 let str1 = 'xxx' let number1 = 200 let isShow = true let blog = { title: 'xxx', // 隐式 string 类型 viewCont: 200 // 隐式 number 类型 } let tags = ['JavaScript', 'Vue', 'React'] // 隐式数组中的类型都是 string 类型
# 一、开发中 ref 定义类型 <script setup lang="ts"> import { ref } from 'vue' interface Product { id: number
1.自定义类型的基本概念 我们在学C语言的时候,学过很多类型。比如int类型,char类型,float类型等。而这些类型都是属于既定类型,也就是自己无法改变和定义的类型。 那么自定义类型顾名思义,就是可以自己来定义的类型。接下来我将要介绍的结构体,联合体,枚举,这些都属于自定义类型。 2.结构体 2.1基本概念 结构是一些值的集合,这些值被称为成员变量。 ,都是char c1,char c2和int i,唯一的区别就是三者的位置发生了改变,理应来说我们得到的打印结果都是一样的,但是在vs的环境下,我们却得到了8和12这样的两个结果。 (对齐数:结构体成员自身大小和默认对齐数的较小值VS上的默认对齐数是8,gcc没有默认对齐数,对齐数就是结构体成员的自身大小,Linux上也相同)。 3.枚举 3.1定义 举例: enum color { blue, yellow, red, pink }; 上面定义的color就是枚举枚举类型,{}中的内容就是枚举类型的可能取值