下面我们讲讲具体的表的约束 空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...插入数据: 我们重新创建一张设置为not null。 当表的这个属性被设置为No时,就表示不能插入Null了。...结论:当我们插入的被设为主键的值和历史上插入过的数据都相同时,是不被允许插入的,但是当我们插入的数据只有一个是和历史上的数据是相同的,是可以被允许的。...这些约束在数据库设计中扮演着至关重要的角色,通过它们可以确保数据的有效性和完整性,帮助开发者避免无效数据的插入,并提升数据表的可维护性。...掌握这些约束的使用,能够让我们在实际开发中构建出更加健壮和清晰的数据库结构,从而提升系统的稳定性和可扩展性。
__construct 构造器是一个魔术方法,当对象被实例化时它会被调用。在一个类声明时它常常是第一件做的事但是没得必要他也像其他任何方法在类中任何地方都可以声明,构造器也能像其他方法样继承。...当我们使用完一个对象时真不想把事情放一边,因此析构方法做着与构造方法相反的事情。当对象被销毁时,析构方法会运行,或者明确的说当我们不再使用它时,php会为我们清理掉。...当对象被序列化然后解序列化,这些引用类型是无用的,因为这些类型的引用的目标可能不再存在或有效。因此,最好是来取消这些信息在存储它们之前。...一个很好的例子程序是数据库句柄被取消设置当该项被序列化,然后恢复到当前配置中设置项目时,解序列化一个数据库句柄。...__debuginfo 当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本 更多参考 http://php.net/manual/zh/language.oop5
before:date 正在验证的字段必须是给定日期之前的值。这个日期将传递到 PHP 的 strtotime 函数中。...required 验证的字段必须存在于输入数据中,而不是空。如果满足以下条件之一,则字段被视为「空」: 值为 null 。 值为空字符串。 值为空数组或空 Countable 对象。...例如,你可以希望某个指定字段在另一个字段的值超过 100 时才为必填。或者当某个指定字段存在时,另外两个字段才能具有给定的值。增加这样的验证条件并不难。...:要被验证的属性名称 attribute、属性的值 value、传入验证规则的参数数组 除了使用闭包,你也可以传入类和方法到 extend 方法中: Validator::extend('foo',....); }); } 隐式扩展 默认情况下,当所要验证的属性不存在或包含一个空字符串时,使用包含自定义扩展的正常的验证规则是不会执行的。
表的约束 表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼用户,插入正确的数据。...一、空属性 两个值:null(默认的) 和 not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算,任何数与 null 相加都为 null...,满足上面条件的数据就不能插入到表中。...,给 gender 字段给空,是会报错的: 但是我们不给值,让它使用默认值就可以插入: 所以当 not null 和 default 同时出现时,它们并不冲突,而是相互补充的。...六、自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1 操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
当以这种方式在Annotated中使用这些参数时,现在会发出警告(并且它们继续被忽略)。...,表明这些对象未包含在刷新中,即使它们是集合的待处理成员;在其他情况下,当要刷新的集合包含将被基本丢弃的非附加对象时,会发出警告。...此外,类的__bool__()方法已校正,以与常见的 Python 容器行为以及其他流行的 PostgreSQL 驱动程序相一致:现在它告诉范围实例是否不为空,而不是相反。...当以这种方式在Annotated中使用这些参数时,将发出警告(并且它们继续被忽略)。...,即这些对象未被包含在刷新中,即使它们是集合的待处理成员;在其他类似情况下,当正在刷新的集合包含将被基本丢弃的非附加对象时,将发出警告。
另外一个大家可能好奇的点是序列化字符串中,保护属性会加上 * 前缀,私有属性加上类名前缀,那公开属性呢?...,需要借助一个额外的存储空间 data 数组,当我们设置不可见属性或者不存在属性时,会将其存储到 data 数组,然后在读取时从数组中获取即可: $car = new Car(); $car->brand...说到这里,我们先简单介绍下对象复制,与基本类型和数组不同,PHP 对象默认情况下通过引用传递(前者是值传递),因此,当我们将一个对象 A 赋值给另一个对象 B 时,B 的属性值修改会同步到对象 A,我们通过...PHP 内置的标准类 stdClass(有点类似 Java 中的 Object 类,是一个预置的空实现类,可以在上面设置任意属性) 来演示。...可以看到,对 carB 属性值的修改会污染 carA 的属性值,这是 PHP 新手在循环代码中做对象赋值时经常会犯的错误,而且迭代次数多了之后不易察觉,要避免这个问题,可以借助 clone 关键字拷贝一个全新的对象来实现
4.1 非空约束 我们可以用非空约束限制属性非空。在创建表时就可以声明属性非空约束,语法是。 name varchar(20) not null 主码中禁止出现空值,不需要显示的指定非空约束。...check子句不能够限制属性非空,因为当check子句的计算结果为未知时,也被认为满足谓词P(结果不是false即满足),需要限制非空必须指定单独的非空约束。...假设我们在关系中插入两个元组,一个是关于John的,另一个是关于Mary的,他们互为配偶,无论先插入哪个,都会导致违反该外码约束,直到另一个元组也被插入。...7.2 角色 教师、学生是不同的角色(role),一个角色类型可能需要同样的权限。比如教师需要授予一类权限,无论何时指派一个新的教师,都应该获取这些权限。 可以授予用户的任何权限都可以授予角色。...一个用户获得权限的充要条件是,当且仅当存在授权图的根到该用户节点的路径。 7.6 权限的级联收回 上游用户的权限回收,会导致下游用户的权限也被回收。
搜索的顺序大致是从object开始,然后是该对象之上的所有类,自下至上,由左到右。 属性访问就是搜索类树,我们称这种搜索为“继承”。因为树中位置较低的对象继承了树中位置较高的对象所拥有的属性。...当从下至上进行搜索时,连接至树中的对象就是树中所有父节点定义的所有属性的并集,直到树的根部。 图中的五个对象,C1,C2,C3是类的对象,l1和l2是实例对象。...python把隐含的实例传入到方法中的第一个参数,习惯上我们把第一个参数命名为self(这只是个习惯,如果你曾经是C++程序员,那么将类中函数的第一个参数命名为this可能更符合你的习惯)。...由于继承是按照搜索来进行的,而这个搜索是按照某种特定顺序进行的,因此你要把属性附件到哪一个对象就显得非常重要。例如:C2和C3都有属性z,然后C1.z将会使用C2中的z,而不是C3中的z....运算符重载方法也是可以被继承的,但是它们的名称开头和结束都带有双下划线(__),当能够支持这些操作的实例出现在对应的运算符旁时,python就会自动运行它们。
php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。...当一个php页面的 URL 尾部参数出现 id=0 时(比如:test.php?...换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。...如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。...当要 判断一个变量是否已经声明的时候 可以使用 isset 函数 当要 判断一个变量是否已经赋予数据且不为空 可以用 empty 函数 当要 判断 一个变量 存在且不为空 先isset 函数 再用 empty
当你运行你的测试时,仅标记有这个属性的类才能够运行。 当构建测试时,你总是使用[TestMethod]和[TestClass]属性。然而,还存在其它若干有用的(但是可选的)测试属性。...最后,还存在一个属性可以支持你当运行一个测试时忽略一个特定的测试方法。当你的一个测试出现问题并且你目前还不想处理该问题时,这个属性就变得相当有用的: ?...:判断数值是Nan IsEmpty/IsNotEmpty:判断字符串是否为空/不为空 IsEmpty/IsNotEmpty:判断集合是否为空/不为空 5、比较大小 Greater:大于 GreaterOrEqual...类 AllItemsAreInstancesOfType:集合中的各项是否是某某类型的实例 AllItemsAreNotNull:集合中的各项均不为空 AllItemsAreUnique:集合中的各项唯一...IsSubsetOf:一个集合是另外一个集合的子集 IsNotSubsetOf:一个集合不是另外一个集合的子集 IsEmpty:集合为空 IsNotEmpty:集合不为空 IsOrdered:集合的各项已经排序
一道经典的面试题,当面试官问你,你是怎么理解面向对象的即OOP,你应该怎么回答呢? 答:面向对象的三个特征是:封装,继承,多态。...6、魔术方法: PHP中,给我们提供一系列用__开头的函数,这些函数无需自己手动调用, 会在合适的时机自动调用,这类函数称为魔术称为魔术函数。...①子类只能继承父类的非私有属性。 ②子类继承父类后,相当于将父类的属性和方法copy到子类,可以直接使用$this调用。 ③PHP只能单继承,不支持一个类继承多个类。但是一个类进行多层继承。...如果为空,则创建对象并返回;如果不为空则直接返回。 ③实例对象的属性以及获取对象的方法必须都是静态的。 ④之后,创建对象只能使用我们提供的静态方法。...2、__destruct():析构函数,当一个对象被销毁前,自动调用。 3、__get():访问类中私有属性时,自动调用。
表的约束的类型 2.1 空属性 两个值:null(默认的)和not null(不为空) 默认的是null,也就是可以为空,但是在很多情况下有些字段是不能为空的,所以就需要not null来约束 案例:...站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...,如果这两个属性没有被插入值就会使用默认值 默认值和空属性是可以同时使用的,两者并不冲突,比如 name varchar(20) not null default '张三'; 这就是一个典型的默认值和空属性同时使用的案例...-> ); 主键约束:主键对应的字段中不能重复,一旦重复就会发生错误 追加主键:当表创建好但是没有主键时,可以追加主键,但进行追加主键操作前需要先确保我们的数据库中,要确认为主键的这个字段中不要有重复和空值的情况...,那么这两个字段都不能重复或为空 2.6 自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得 到一个新的不同的值。
1、空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算 示例:创建一个班级表,...包含班级名和班级所在的教室 如果班级没有名字,你不知道你在哪个班级,如果教室名字可以为空,就不知道在哪上课 所以在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中,这就是...,可以使用复合主键 6、自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值 auto_increment...在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单 索引的作用相当于图书的目录...这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息 7、唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题
目标是,这些长期被弃用的功能,甚至可以追溯到版本 0.7 或 0.6,应该开始被完全移除,而不是将它们保留为“遗留”功能。此外,从版本 1.3 开始,还添加了一些重大的新弃用项。...然而,这种方法的一个潜在缺点是,当池的利用率较低时,池中每个连接的串行重复使用意味着试图减少未使用连接的服务器端超时策略被阻止关闭这些连接。...目标是,这些长期弃用的功能,可以追溯到版本 0.7 或 0.6,应该开始被完全移除,而不是将它们保留为“遗留”功能。此外,一些重大的新弃用功能正在版本 1.3 中添加。...然而,这样做的一个潜在缺点是,当池的利用率低时,池中的每个连接的串行重复使用意味着试图减少未使用连接的服务器端超时策略被阻止关闭这些连接。...然而,这种方法的一个潜在缺点是,当池的利用率较低时,池中每个连接的串行重复使用意味着试图减少未使用连接的服务器端超时策略被阻止关闭这些连接。
封装、继承、多态 并发 反射 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java...当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK1.2之后,提供了WeakReference类来实现弱引用。...一个进程中可以有多个线程,它们共享进程资源。 区别 进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。...getInstance()方法时,instance为空,同步操作,保证多线程实例唯一 * 当第一次后调用getInstance()方法时,instance不为空,不进入同步代码块,减少了不必要的同步...AOP是对OOP的补充和完善。AOP利用的是代理,分为CGLIB动态代理和JDK动态代理。OOP引入封装、继承和多态性等概念来建立一种对象层次结构。OOP编程中,会有大量的重复代码。
Collection 每个位置只能保存一个元素(对象) Map保存的是”键值对”,就像一个小型数据库。...新元素插入(offer)到队列的尾部, 访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素。...(windows平台上的.ini文件),Properties类可以把Map对象和属性文件关联起来,从而可以把Map对象中的key-value对写入到属性文 件中,也可以把属性文件中的"属性名-...但WeakHashMap的key只保留了对实际对象的弱引用,这意味着如果WeakHashMap对象的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被垃圾回收,当垃 圾回收了该...3.2.5判断元素是否存在: 1、首先判断条件元素是否为空,是则遍历集合,有就返回true,否则false。2、不为空,则使用equals方法,需要遍历集合。
特别是当“二进制”表达式被放置到更大的表达式中时,它们会提供一个围绕自身的分组,以及当select()构造被放置到另一个select()的 FROM 子句中时。...特别是它被“二进制”表达式用于在放置到更大表达式中时提供自身周围的分组,以及被放置到另一个 select() 的 FROM 子句中的 select() 构造使用。...当other是一个空序列时,编译器会生成一个“空不在”表达式。这默认为表达式“1 = 1”,在所有情况下产生 true。...特别是当“二进制”表达式放置到较大表达式中时,它们用于提供对自身的分组,以及当 select() 构造放置到另一个 select() 的 FROM 子句中时。...特别地,它被“二进制”表达式用来在放置到更大的表达式中时提供一个围绕自己的分组,以及被select()构造用来放置到另一个select()的 FROM 子句中时。
使用实体类的主要好处来自一个简单的事实,即实体类是完全受我们控制的对象,它具有面向对象的基本特征。我们可以自由地向实体类添加行为(如:判断是否为空,如果为空指定默认值,这只是一个简单的扩展。...控件等,它们都有一个数据源属性(DataSource),可以直接将实体对象集合绑定到数据源属性上。...业务实体对数据的处理,实体类本身是由属性组成的,而大多都是可读可写属性。所以,根据请求的不同可以给属性设置不同的值,例如:当用户的请求为空时,给属性设置默认值。 二....当请求的结果是多条记录时,我们将每一条记录封装成一个实体对象,然后再将多个实体对象封装成集合(将多个实体对象封装到List中)。 (2)将实体对象中的数据保存到数据库中。...例如在using语句范围内定义了一个数据库连接对象,当程序执行到using语句末尾时,将自动释放此数据库连接对象,从而大大简化了代码,并在一定程度上提高了资源使用效率。
语法,对于形参类型声明与返回类型声明一样的情况是无影响的,这样就能区分开它们各自的返回数据类型了 使用类型声明有一个明显的好处,即它可以让函数、方法的形参与返回值有所预期,避免出现不必要的数据传递,从而造成错误...Fatal错误都可以被截获 大多数的Fatal错误都会抛出一个error实例,类似于截获异常,error实例可以被try/catch截获 B.新的操作符 1.太空船操作符() 在比较变量时非常有用...,包括数值(字符串型、整型、浮点型等)、数组、对象 当符号两边相等时返回0 当符号右边大于符号左边时返回-1 当符号左边大于符号右边时返回1 可以用于书写清晰易读的用于usort、uasort、uksort...4.Grunt:是一个JavaScript任务运行器,能够将某些重复的任务自动化,避免反复工作 5..全页缓存 6.Varnish:开源的Web应用程序加速器 D.基础设施 1.Web服务器 2.数据库服务器...1.类名中每个单词的首字母必须大写,左大括号应该在类名后新起一行,右大括号应该在类结束后新起一行 2.类的方法和函数命名应该是驼峰式的,参数和紧跟着的逗号之间不应有空格 3.命名空间的声明之后应该空一行
插入一下,先说说 PHP 手册的用法,像这种魔术方法,是无法通过手册中的搜索来找到的,需要通过 URL 访问的方式,例如: __toString():https://www.php.net/__tostring...魔术方法是一种特殊的方法,当对对象执行某些操作时会覆盖 PHP 的默认操作。...__toString() public __toString(): string __toString() 方法用于一个类被当成字符串时应怎样回应。...$values): mixed 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。...深入了解这些方法将有助于提升我们在 PHP 开发中的技能和效率。