<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[demon的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/demon3182</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; demon3182]]></copyright><item><title><![CDATA[PHP隐式类型转化]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/114537730</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/114537730</guid><author>demon3182</author><pubDate>Mon, 08 Mar 2021 16:53:47 +0800</pubDate><description><![CDATA[布尔值转化为字符串
首先看一下下面一段代码：
$a = true;
$b = false;

var_dump(strlen($a)); // 1
var_dump(strlen($b)); // 0

在使用 strlen 时布尔变量会隐式转化为字符串，true 转化为字符串1, false转化为空字符串，其转化规则我们可以在PHP源码中找到答案。
// 非字符串类型转化规则
ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_cop]]></description><category></category></item><item><title><![CDATA[Yii2 数据库表映射为模型]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/108736133</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/108736133</guid><author>demon3182</author><pubDate>Tue, 22 Sep 2020 17:33:02 +0800</pubDate><description><![CDATA[Yii2 数据库表映射为模型
使用 yii2 自带的命令 yii 中的内置命令 gii 可以将数据库中的表结构映射为 Model 类文件：

查看 gii 的使用帮助

$ php yii gii/model --help

DESCRIPTION

This generator generates an ActiveRecord class for the specified database
table.

USAGE

yii gii/model [...options...]

OPTIONS
..]]></description><category></category></item><item><title><![CDATA[SQLAlchemy 自动分表]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/108383954</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/108383954</guid><author>demon3182</author><pubDate>Thu, 03 Sep 2020 15:24:52 +0800</pubDate><description><![CDATA[将数据库中的表自动映射ORM类
在 SQLAlchemy 中提供了将数据库中的表自动映射为ORM类的扩展(sqlalchemy.ext.automap)。

基本用法

最简单用例是将一个已存在的数据库映射为新的model。
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine

Base = automap_base()
]]></description><category></category></item><item><title><![CDATA[php foreach中引用传值指针问题]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/107669249</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/107669249</guid><author>demon3182</author><pubDate>Wed, 29 Jul 2020 17:04:24 +0800</pubDate><description><![CDATA[首先我们需要了解PHP foreach的遍历机制, 简单来讲 php foreach 遍历中会存在一个类似于 JavaScript 中变量提升的问题。
我们看下面得一个例子：
&lt;?php

$arr = array(1, 2, 3);

foreach ($arr as $v) {};

var_dump($v); // 3

此时 $v 的值为数组 $arr 的最后一个值；
那么我们将上面的例子稍微改一下：

$arr = array(1, 2, 3);

// 此时使用，引用赋值
// 第一次，$]]></description><category></category></item><item><title><![CDATA[Laragon下添加新版本Python]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/104767126</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/104767126</guid><author>demon3182</author><pubDate>Tue, 10 Mar 2020 09:34:16 +0800</pubDate><description><![CDATA[Laragon下添加新版本Python

在 https://www.python.org/ 下载所需要的Python版本安装包 Windows x86-64 executable installer
双击安装，取消下面的多选框，点击 Customize installation
取消 tcl/tk and IDLE和py launcher,点击next
选择python安装路径，位于 \lara...]]></description><category></category></item><item><title><![CDATA[SQLAlchemy 模型转字典以及处理特殊字段方式]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/88801768</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/88801768</guid><author>demon3182</author><pubDate>Tue, 26 Mar 2019 09:11:51 +0800</pubDate><description><![CDATA[SQLAlchemy 模型转字典以及处理特殊字段方式问题描述问题分析问题处理
问题描述
使用SQLAlchemy创建ORM模型后，会存在这样一类问题：
1.直接返回查询结果会存在 对象转json失败
TypeError: Object of type 'XXX' is not JSON serializable

2.返回对象中有一些字段我们不希望输出道接口中
eg: 用户模型中的 passwor...]]></description><category></category></item><item><title><![CDATA[Electron 3 不能自动播放音频]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/85095943</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/85095943</guid><author>demon3182</author><pubDate>Wed, 19 Dec 2018 14:16:21 +0800</pubDate><description><![CDATA[Electron 3 audio not allowed before user interaction with the page (Chrome 66 autoplay policy) #13525

问题
使用 Electron打包的应用不能自动播放音频文件。
问题的起源
Chrome 66 之后更新了，自动播放的策略以提供更友好的交互体验。
解决方法
app.commandLine.app...]]></description><category></category></item><item><title><![CDATA[javascript检查重复字符串]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/81077936</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/81077936</guid><author>demon3182</author><pubDate>Tue, 17 Jul 2018 11:13:26 +0800</pubDate><description><![CDATA[javascript检查重复字符串

题目描述

给定字符串 str，检查其是否包含连续重复的字母（a-zA-Z），包含返回 true，否则返回 false。

思路一

最直接的方法就是暴力循环检测是否有重复字母出现。



function containsRepeatingLetter(str) {
    // 第一步
    // 将非字母替换为空
    var tmp = str.r...]]></description><category></category></item><item><title><![CDATA[javascript组合式继承与寄生组合式继承]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/80810539</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/80810539</guid><author>demon3182</author><pubDate>Tue, 26 Jun 2018 09:52:02 +0800</pubDate><description><![CDATA[javascript组合式继承与寄生组合式继承

javascript组合式继承

组合继承式javascript最常见的继承模式；不过他也有自己的不足。组合继承最大的问题就是无论在什么情况下都会调用两次超类型构造函数： 一次是在创建子类型原型的时候，另一次是在子类型构造函数内部。



function SuperType (name) {
    this.name = name;
    t...]]></description><category></category></item><item><title><![CDATA[javascript 实现类似于php in_array 的函数]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/80438422</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/80438422</guid><author>demon3182</author><pubDate>Thu, 24 May 2018 17:37:53 +0800</pubDate><description><![CDATA[javascript 实现类似于php in_array 的函数

JavaScript 并没有提供像PHP一样直接检查数组中是否存在某个值的函数，但提供了一个类似的方法用来遍历数组 some

some() 方法用于检测数组中的元素是否满足指定条件（函数提供）。

some() 方法会依次执行数组的每个元素：

如果有一个元素满足条件，则表达式返回true , 剩余的元素不会再执行检测。 
如果...]]></description><category></category></item><item><title><![CDATA[Laragon 添加MongoDB服务]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/79848980</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/79848980</guid><author>demon3182</author><pubDate>Sun, 08 Apr 2018 10:58:05 +0800</pubDate><description><![CDATA[Laragon 添加MongoDB服务


下载MongoDB免安装包 — mongodb官网下载地址  

解压文件 — 将压缩包解压到 laragon/bin/mongodb/ 目录下 

运行 laragon — 右键点击设置图标选择mongodb 
 

点击 terminal打开控制台 — 键入 mongo 



关于 laragon 的介绍...]]></description><category></category></item><item><title><![CDATA[非递归深度优先遍历树结构数据]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/79813670</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/79813670</guid><author>demon3182</author><pubDate>Wed, 04 Apr 2018 10:22:53 +0800</pubDate><description><![CDATA[js 非递归深度优先遍历树结构数据

使用递归方法实现对树的遍历效率非常低，下面利用栈的特性来实现对树的深度优先遍历；





&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;tree&amp;lt;/title&amp;]]></description><category></category></item><item><title><![CDATA[初识 service worker]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/79290708</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/79290708</guid><author>demon3182</author><pubDate>Thu, 08 Feb 2018 15:59:59 +0800</pubDate><description><![CDATA[初识 service worker


  与君初相识，犹如故人归。


很早就听别人说起过 service worker, 可是直到现在才有时间来尝试这项技术。 它的理论之类的东西我就不再赘述，感兴趣自行百度，咱废话不多说先让代码飞一会(Talk is cheap, show me the code.)。

开始之前还是先了解一下基本概念：


什么是ServiceWorker?
什么是Prom...]]></description><category></category></item><item><title><![CDATA[一览 promise、async/await]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/79278229</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/79278229</guid><author>demon3182</author><pubDate>Wed, 07 Feb 2018 11:32:09 +0800</pubDate><description><![CDATA[一览 promise、async/await

下面用一个http请求来简要概述 Promise, async/await。


在没有 Promise 之前 发送一个 http请求是这样：


function httpRequest() {
    var xhr = new XMLHttpRequest();

    xhr.open("GET", "http://cnodejs.org/]]></description><category></category></item><item><title><![CDATA[使用jQuery.animate实现简单的页面切换效果]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/79261632</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/79261632</guid><author>demon3182</author><pubDate>Mon, 05 Feb 2018 16:36:44 +0800</pubDate><description><![CDATA[使用jQuery.animate实现简单的页面切换效果



涉及知识点


jQuery.animate
css position
css flex 布局


设计与实现



jQuery.animate()

语法：

$(selector).animate(styless[,duration][,easing][,callback]);

styles Object 必须 定义动画的css]]></description><category></category></item><item><title><![CDATA[DOMException: The play() request was interrupted by a call to pause().]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/79196282</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/79196282</guid><author>demon3182</author><pubDate>Mon, 29 Jan 2018 15:50:40 +0800</pubDate><description><![CDATA[Uncaught (in promise): The play() request was interrupted by a call to pause().



场景

JavaScript 在调用 Audio 播放声音的时候，因为处理不当经常会出现上面的错误提示。



问题分析

在调用 Audio 的 play() 方法之后就立即被之后一次调用 pause() 方法中断了。错误提示中明确]]></description><category></category></item><item><title><![CDATA[Uncaught TypeError: Cannot set property 'innerHTML' of null]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/79031235</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/79031235</guid><author>demon3182</author><pubDate>Thu, 11 Jan 2018 10:29:21 +0800</pubDate><description><![CDATA[Uncaught TypeError: Cannot set property 'innerHTML' of null

从错误提示 “不能为 null 设置 innerHTML属性“，也就是说在javascript在对DOM节点的innerHTML赋值的时候，没有获取到该DOM节点。

原因可能是：


该DOM节点不存在
在执行JavaScript脚本的时候，该DOM节点还未加载完成。]]></description><category></category></item><item><title><![CDATA[WebStorm 静态资源文件引用地址报错]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/78788488</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/78788488</guid><author>demon3182</author><pubDate>Wed, 13 Dec 2017 09:53:29 +0800</pubDate><description><![CDATA[WebStorm 静态资源文件引用地址报错有时我们在webstorm中编辑html, 或者 css 文件的时候需要引用外部文件。例如：在如下目录结构的项目中，需要在style.css 文件中引用一张图片，当使用绝对路径时，路径下面会有红色的波浪线，看着很不好。（当然可以使用相对路径，就不会出现上述情况）。我们可以让编辑器识别使用绝对路径的写法，那就是将public目录设置成资源根目录。右键点击pub]]></description><category></category></item><item><title><![CDATA[javascript 数组去重]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/78653032</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/78653032</guid><author>demon3182</author><pubDate>Tue, 28 Nov 2017 11:15:33 +0800</pubDate><description><![CDATA[javascript 数组去重
利用键的唯一性，将数组的键和值倒置去重。var arr = [1, 3, 5, 9 , 3 , 2, 8 , 5, 6 , 2 , 7, 5];Array.prototype.uniqueBykey = function () {
    var oArr = {};
    var res = [];    this.forEach(function (value,]]></description><category></category></item><item><title><![CDATA[webApp 移动端键盘显示 搜索 按键]]></title><link>https://blog.youkuaiyun.com/demon3182/article/details/78403217</link><guid>https://blog.youkuaiyun.com/demon3182/article/details/78403217</guid><author>demon3182</author><pubDate>Tue, 31 Oct 2017 14:42:59 +0800</pubDate><description><![CDATA[webApp 移动端键盘显示 搜索 按键实现需要使用 form标签包裹 <input type="search" />。例如：
<form>
    <input type="search" placeholder="搜索" />
<form>
当移动端键盘输入字符后，键盘上会显示一个 “搜索”的按键。问题但是以上的这种方法，在部分手机上会出现点击了键盘上的搜索，页面会跳转到一个 url，这是我们不]]></description><category></category></item></channel></rss>