首页
资源下载仓库
关于我们
Search
1
Android Studio 卡在fastutil-7.2.0.jar不动
59 阅读
2
JavaScript——预编译
46 阅读
3
拓行 祝您,2024年元旦快乐
38 阅读
4
PHP设计模式--原型模式
29 阅读
5
JavaScript——类型转换
26 阅读
默认分类
技术
PHP
SQL
Linux
Android
Git
HTML
CSS
Js
新闻消息
产品
工具推荐
Search
标签搜索
javascript
js
php
设计模式
拓行
累计撰写
5
篇文章
累计收到
1
条评论
首页
栏目
默认分类
技术
PHP
SQL
Linux
Android
Git
HTML
CSS
Js
新闻消息
产品
工具推荐
页面
资源下载仓库
关于我们
搜索到
3
篇与
的结果
2021-08-10
PHP设计模式--原型模式
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式形象来说应该叫克隆模式,它主要是将对象克隆,把被克隆的对象称之为最初的原型。使用场景:用于创建重复的对象,这种类型的设计模式属于创建型模式。优点:1、可以改变值以指定新对象2、可以改变结构以指定新对象3、减少子类的构造4、用类动态配置应用这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。原型模式结构图:php利用魔术方法__clone()方法克隆出对象。<?php abstract class Prototype { public $v = 'clone' . PHP_EOL; public function __construct() { echo 'create' . PHP_EOL; } abstract public function __clone(); } class ConcretePrototype1 extends Prototype { public function __clone() { } } class ConcretePrototype2 extends Prototype { public function __clone() { } } class Client { public function operation() { $p1 = new ConcretePrototype1(); $p2 = clone $p1; echo $p1->v; echo $p2->v; } } $c = new Client(); $c->operation();客户端使用clone来复制$p1,可以看到$p2也具有相同的$v属性。
2021年08月10日
29 阅读
0 评论
1 点赞
JavaScript——预编译
javascript的两大特点:单线程解释性语言js运行三部曲语法分析预编译解释执行预编译前奏1、暗示全局变量:即任何变量:如果变量未经声明就赋值,此变量就为全局对象所有。eg: a = 123;eg: var a = b = 123;2、一切声明的全局变量,全是window的属性。eg:这一句:var a = 123;等价于:window.a = 123;预编译四部曲创建AO对象(Activation Object,执行期上下文)。找形参和变量声明,将变量和形参名作为AO属性名,值为undefined。将实参值和形参统一。在函数体里面找函数声明,值赋予函数体。注:if语句里不能定义函数。未经声明的变量唯一放在typeof()里不会报错。
2020年08月25日
46 阅读
0 评论
1 点赞
JavaScript——类型转换
显性类型转换:1、转数字:Number(mix),把mix转为数值类型eg:Number('-123'); // -123 Number(null); // 0 Number(undefined); // NaN Number('123abc'); // NaN看起来不是数字的基本转化为NaN,但仍为数值类型2、转整数:parseInt(demo)/parseInt(demo,radix)1)、把demo转化为整数eg:parseInt('123.26'); // 123,其他的不像数字的都为NaN2)、radix:2~36进制,以这些进制为基底把demo转换为十进制eg:parseInt('10', 16); // 163、转浮点型:parseFloat(demo)从头看到除 . 外的非数字位截止,把demo转为浮点值,整数仍为整数eg:parseFloat('100.bg'); // 100 parseFloat('100.485abc'); // 100.4584、转字符串型:String(mix),把mix转化为字符串类型eg:String(123); // '123'5、转布尔型:Boolean(mix),把mix转化为布尔类型eg:Boolean(''); // false Boolean(' '); // true6、转字符串型:toString()/toString(radix)1)、把目标转为字符串型eg:var demo = 123; demo.toString(); // '123';2)、以十进制为基底把目标值转化为目标进制radix的字符串型eg:var demo=123; demo.toString(8); //'173'注:undefined、null不可转换隐性类型转换1、isNaN(mix)系统先进行Number(mix)转化,把值再和NaN对比,结果相等为true,不是为falseeg:isNaN('123'); // true isNaN('abc'); // false isNaN(null); // false,因为Number(null)=02、++、--、+、-(正负):含隐性转化Number(mix)eg:var a ='abc'; a ++; // 最后结果,a=NaN解释:先进行Number(a)=NaN再a++还是为NaN注意a的类型是Number,因为进行了转化3、+(加号):转字符串类型eg:'abc'+ 1; // 'abc1'4、-、*、/、%:含隐性转化Number(mix)5、&&、||、!:含隐性转化布尔型eg:! 8; //false,先把数值型8转换为布尔型true6、>、<、>=、<= :含隐性转化Number(mix)eg:1 > '2'; //把字符'2'隐性转换为数值27、==、!= :含隐性转化Number(mix)注:NaN != NaN // true undefined == null // true不发生类型转换:1、===:绝对等于eg:1 === '1'; //false2、!==:绝对不等于eg:NaN !== NaN; //true,NaN为特殊,它绝对不等于自己
2020年08月21日
26 阅读
0 评论
1 点赞