首页
Search
1
解决 docker run 报错 oci runtime error
49,335 阅读
2
WebStorm2025最新激活码
27,568 阅读
3
互点群、互助群、微信互助群
22,731 阅读
4
常用正则表达式
21,540 阅读
5
罗技鼠标logic g102驱动程序lghub_installer百度云下载windows LIGHTSYNC
19,318 阅读
自习室
CODER
课程
SEO
学习视频
手册资料
呆萌
工具软件
运维
DBA
互通有无
资源
微信群
激活工具
搞钱日记
养生记
包罗万象
登录
Search
标签搜索
DeepSeek
学习指北
Prompt
提示词
Loong
累计撰写
179
篇文章
累计收到
0
条评论
首页
栏目
自习室
CODER
课程
SEO
学习视频
手册资料
呆萌
工具软件
运维
DBA
互通有无
资源
微信群
激活工具
搞钱日记
养生记
包罗万象
页面
搜索到
36
篇与
的结果
2019-03-11
内部类-非静态内部类|静态内部类|匿名内部类
内部类-非静态内部类|静态内部类|匿名内部类package com.weitip.oop; /** * Created by IntelliJ IDEA. * User: loong * Date: 2019/3/11 * Time: 15:35 * Description: com.weitip.oop **/ public class InnerClass { public static void main(String[] args) { Outer.Inner inner = new Outer().new Inner(); inner.show(); Outer.Inner2 inner2 = new Outer.Inner2(); inner2.show(); } } class Outer{ private int age = 20; class Inner{ int age = 999; public void show(){ int age = 999999; System.out.println("外部类属性age:" + Outer.this.age); System.out.println("内部类属性age:" + this.age); System.out.println("局部变量age:" + age); } } static class Inner2{ public static void show() { System.out.println("内部静态类被调用"); } } }package com.weitip.oop; /** * Created by IntelliJ IDEA. * User: loong * Date: 2019/3/11 * Time: 16:01 * Description: com.weitip.oop **/ public class AnonymousInnerClass { public static void test(AA a){ a.aa(); } public static void main(String[] args) { AnonymousInnerClass.test(new AA(){ @Override public void aa() { System.out.println("匿名内部类被调用"); } }); } } interface AA{ void aa(); }
2019年03月11日
1,929 阅读
0 评论
0 点赞
2019-02-17
PHP7新特性
PHP7中也增加了一些新的语法,这些语法的使用也能对提高性能有帮助。1.标量参数类型声明 现在支持字符串(string)、整型(int)、浮点数(float)、及布尔型(bool)参数声明,以前只支持类名、接口、数组及Callable两种风格:强制转换模式(默认)与严格模式。<?php function sum(int ...$numbers){ var_dump($numbers); return array_sum($numbers); } echo sum("18","9984");运行结果如下: 以string类型传入的值会被强制转换为int类型,若类型转换失败会抛出错误。2.返回类型声明<?php function test():array { return [456,996]; } var_dump(test());运行结果:若返回值类型不为预设类型则报错:<?php function test():array { return 666; } var_dump(test());3.??运算符 ?? 用于替代需要isset的场合,这是一个语法糖。<?php $id = isset($_GET['id']) ? $_GET['id'] : null; $id = $_GET['id'] ?? null; 这两种写法是等效的。4.比较运算符 就是看两个表达式值的大小,三种关系: = 返回0、< 返回-1、 > 返回 1<?php echo 1 2; //-1 echo 1 1; //0 echo 2 1; //15.define支持定义数组类型的值 php 5.6已经支持CONST 语法定义数组类的常量,PHP7中支持define语法。"lili", "age"=>18]); var_dump(human);6.匿名类write();7.增加了整除函数 intdiv 对除法结果取整<?php echo intdiv(10,3); //输出3小结:性能提升:PHP 7要比PHP 5.6快两倍;全面一致的64位支持;新增了空接合操作符(??)。
2019年02月17日
5,683 阅读
0 评论
13 点赞
2019-02-17
PHP生成随机标识
用于微信小程序接口开发中生成3rd_session。/*** 生成随机标识*@param$len*@returnmixed|string*/public functionrandomFromDev($len) { $fp= @fopen('/dev/urandom','rb'); $result=''; if($fp!==FALSE) { $result.= @fread($fp,$len); @fclose($fp); }else{ trigger_error('Can not open /dev/urandom.'); } if(empty($result))$result= md5(mt_rand(111111111,999999999));//兼容 $result= base64_encode($result);// convert from binary to string $result= strtr($result,'+/','-_');// remove none url chars returnsubstr($result,0,$len);}
2019年02月17日
5,332 阅读
0 评论
4 点赞
2019-02-16
商品sku匹配及属性可选状态
最近在做商品sku的时候遇到了一些困惑,记录一下,以备日后会看。 先说一说需求: 1.根据选中的SKU,显示对应的SKU图片,没有选中的SKU时,默认展示SPU商品图,单击放大预览; 2.每个属性下属性值有多个时,默认不选,只有一个时,默认选中; 3.后台没有设置SKU时,则无属性值展示; 4.选中交互:选中某一个属性下属性值时,检查其他属性的属性值,哪些不能组合为一个SKU,不能组合的属性值只读,原选中的则取消选中。 已上就是给出的文字需求,在需求讨论的时候产品定了调调,通过既定的属性去确定一个sku,即所有未选择的属性假定一个初始值。一听心里乐了,所有选中的属性都已知,排序之后再匹配不就是轻松确定sku了嘛,美滋滋。/** * 获取商品sku属性(初始默认选中,已经被否了呀) */ public function goods_sku_version_1 (){ $goodsId = $this->post['goods_id'] or $this->response(201, 'goods_id不能为空'); $catId = mall_database_execute('goods') ->where(['goods_id' => $goodsId, 'is_on_sale'=> 1, 'is_delete' => 0]) ->getField('goods_type') or $this->response(208, '商品不存在'); //构建查询条件 $where = ['gs.goods_id'=> $goodsId]; $attrArr = []; if (!empty($this->post['attr_id'])){ $attrArr = explode(',', $this->post['attr_id']); sort($attrArr); //升序 $where['gs.attr_id_arr'] = implode(',', $attrArr); } //获取sku信息 $this->rows['info'] = mall_database_execute('goods_sku')->alias('AS gs') ->where($where) ->find() or $this->response(208, 'sku不存在'); if (empty($this->post['attr_id'])) $attrArr = explode(',', $this->rows['info']['attr_id_arr']); //获取顶级sku列表 $this->rows['attribute'] = mall_database_execute('goods_sku_list')->alias('AS gsl') ->field('ga.attr_id, ga.attr_type, ga.attr_name, gsl.attr_values_arr') ->join(mall_database_table('goods_attribute').' AS ga ON ga.attr_id = gsl.attr_id', 'LEFT') ->where([ 'gsl.goods_id' => $goodsId, 'gsl.status' => 1 ]) ->select() ? : ''; if (!empty($this->rows['attribute'])){ //通过二定一待,确定sku foreach ($this->rows['attribute'] as $k=>&$v){ $newAttrArr = $attrArr; $newAttrArr[$k] = '%'; $str = implode(',', $newAttrArr); $v['option'] = mall_database_execute('goods_sku') ->field('goods_sku_id,attr_id_arr,status' ) ->where([ 'goods_id' => $goodsId, 'attr_id_arr' => ['LIKE', $str] ]) ->select(); if (!empty($v['option'])){ foreach ($v['option'] as &$vo){ $newAttrArr = explode(',', $vo['attr_id_arr']); $attrInfo = mall_database_execute('goods_attribute') ->field('attr_id, attr_type, attr_name') ->where([ 'attr_id' => $newAttrArr[$k] ]) ->find(); unset($vo['attr_id_arr']); $vo = array_merge($attrInfo, $vo); } } } } $this->response(); } 本以为这样就完事了,结果没过多久需求就改了,不假定每个属性的初始值,根据用户当前选择动态匹配sku,GG。这个方案一开始没想明白的点在于,基于用户当前选择,推算所有属性的节点是否还有可选的可能(可用sku),之前想到过这一层面,想着偷懒完成需求即可,便没有深究。/** * 基于用户当前属性选择状态,获取sku,及推算每个属性的可选状态 */ public function goods_sku(){ $goodsId = $this->post['goods_id']; //检测商品是否存在 mall_database_execute('goods') ->where(['goods_id' => $goodsId, 'is_on_sale'=> 1, 'is_delete' => 0]) ->getField('goods_id') or $this->response(208, '商品不存在'); $where = [ 'goods_id' => $goodsId, 'status' => 1 ]; //获取所有可选sku的属性组合 $allSkuLists = array_column(mall_database_execute('goods_sku') ->field('attr_id_arr') ->where($where) ->select(), 'attr_id_arr'); $this->rows['sku_num'] = count($allSkuLists); if (!empty($this->post['attr_id'])){ $attrArr = explode(',', $this->post['attr_id']); foreach ($attrArr as &$vv){ if ($vv == '') $vv = '%'; } $where['old_id_arr'] = ['LIKE', implode(',', $attrArr)]; } //查询一个当前用户选择状态下满足条件的组合(先这样,等产品出了可能组合排序规则再完善) $this->rows['info'] = mall_database_execute('goods_sku') ->field('goods_sku_id,price,goods_number,attr_value,goods_thumb') ->where($where) ->find() ? : ''; if ($this->rows['info']['goods_thumb']) $this->rows['info']['goods_thumb'] = change_file_path($this->rows['info']['goods_thumb']); //获取规格 $attribute = mall_database_execute('goods_sku_list')->alias('AS gsl') ->field('ga.attr_id, ga.attr_type, ga.attr_name, gsl.attr_values_arr') ->join(mall_database_table('goods_attribute').' AS ga ON ga.attr_id = gsl.attr_id', 'LEFT') ->where([ 'gsl.goods_id' => $goodsId, 'gsl.status' => 1 ]) ->order('attr_type asc, attr_id asc') ->select(); if (!empty($attribute)){ //遍历获取所有规格的属性,并假定每种属性都不可选 foreach ($attribute as $k=>&$v){ $v['option'] = mall_database_execute('goods_attribute') ->field('attr_id,attr_type,attr_name,2 as status') ->where([ 'attr_id' => ['IN', $v['attr_values_arr']], 'status' => 1 ]) ->order('attr_id asc') ->select(); unset($v['attr_values_arr']); if (!empty($allSkuLists)){ //遍历所有属性判断基于用户选择状态下属性是否有可选方案 foreach ($v['option'] as &$vo){ //获取用户当前选择 $checkSku = explode(',', $this->post['attr_id']); //把当前属性与用户选择进行组合 $checkSku[$k] = $vo['attr_id']; //遍历所有可能的组合列表,查找是否有匹配当前的组合 foreach ($allSkuLists as $vov){ //判断条件:如果我有的你都有那就对了 $intersect = array_intersect($checkSku, explode(',', $vov)); asort($intersect); asort($checkSku); //序列化后做比较 if (implode(',', $intersect) == implode(',', array_filter($checkSku))) $vo['status'] = '1'; } } } } } $this->rows['attribute'] = $attribute ? : ''; $this->response(); }附上表结构:CREATE TABLE `fd_goods_sku` ( `goods_sku_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', `goods_id` int(11) NOT NULL, `old_id_arr` varchar(255) NOT NULL DEFAULT '' COMMENT '没排序之前的id组合', `attr_id_arr` varchar(255) NOT NULL DEFAULT '0' COMMENT '属性id', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1正常,2失效', `price` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '售价,单位分', `goods_number` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '库存', `attr_value` varchar(255) NOT NULL DEFAULT '' COMMENT '商品自定义属性', `goods_thumb` varchar(255) NOT NULL DEFAULT '', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`goods_sku_id`), KEY `goods_id` (`goods_id`,`goods_sku_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2208 DEFAULT CHARSET=utf8mb4 COMMENT='商品sku表'; CREATE TABLE `fd_goods_sku_list` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `goods_id` int(10) unsigned NOT NULL, `attr_id` varchar(255) NOT NULL DEFAULT '' COMMENT '属性id', `attr_values_arr` varchar(255) NOT NULL DEFAULT '' COMMENT '属性值id', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1正常,2失效', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=599 DEFAULT CHARSET=utf8mb4 COMMENT='商品已选属性表'; 以上仅作记录,如大神们有更好方案请不吝赐教。
2019年02月16日
12,938 阅读
0 评论
35 点赞
2019-01-09
PHP Warning: file_get_contents failed to open stream解决办法
file_get_contents函数在获得远程文件时提示Warning: file_get_contents failed to open stream,希望例子能够帮助到各位,希望例子能够帮助到大家。在做项目时用 file_get_contents 来获取数据,php 报错 PHP Warning: file_get_contents failed to open stream: no suitable wrapper could be found.最后用了curl来获取数据!今天百度了一下!找到了解决办法!先拷贝过来!系统:centos 6.5在错误日志中,php报的错误是Warning: file_get_contents() [function.file-get-contents]: http:// wrapper is disabled in the server configuration by allow_url_fopen=0failed to open stream: no suitable wrapper could be found此警告说服务器阻止访问远程文件,修改php.ini把allow_url_fopen = Offallow_url_include = Off改成allow_url_fopen = Onallow_url_include = On重启php-fpm或者重启web服务。如果还是无法解决 的话windows下处理方法:c:\windows\php.iniextension=php_openssl.dll 把前的;去掉,重启iis服务。linux下处理方法:/etc/php.iniextension=php_openssl.dll 把前的;去掉,重启apache服务。 如果上面问题没能解决我的问题,我们可以如下测试。 $context = stream_context_create(array('http'=>array('ignore_errors'=>true)));$contents = file_get_contents($url, FALSE, $context);可以请求时,忽略错误。可以解决警告信息
2019年01月09日
6,266 阅读
0 评论
3 点赞
1
...
6
7
8