sbf胜博发娱乐城请教大家三表连接查询的sql怎么写

( sbf胜博发娱乐城 )

有如下三张表(第一行为字段名)

user用户表:

id name
1 aaa
2 bbb
3 ccc

chargeRecord充值记录表:

id userId money
1 1 10
2 1 2
3 2 4
4 2 6

record通话记录表:

id callId(主叫) beCallId(被叫) time(时长)
1 2 1 23
2 3 1 2
3 2 3 16

如何利用user表里面的id 和充值记录表的userId 以及record表的callId/beCallId做连接
查询 用户名,充值总金额,和通话总时长(主叫时长)
新手谢过大家了!!

SELECT user.id AS id, user.name AS name, charge.money AS money, record.time AS time
FROM user
LEFT JOIN (SELECT userId, SUM(money) AS money FROM chargerecord GROUP BY userId) AS charge ON user.id = charge.userId
LEFT JOIN (SELECT callId, SUM(time) AS time FROM record GROUP BY callId) AS record ON user.id = record.callId
ORDER BY user.id

怎么查 楼上已经给出了 我有一篇关于多表查询的文章 希望对楼主了解多表查询有帮助:SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

各位 如果不喜欢这个答案 给评论回复 我撤掉回复 求别踩

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

SBF胜博发娱乐老虎机php的cli如何实现读取用户输入,但隐藏这段字符输出

( SBF胜博发娱乐老虎机 )

简单来说就是比如大家用ssh登陆时,一般要求输入密码,然后当你输入时你的输入是被隐藏的,但是后端实际上获取到了你的输入,这是怎么做到的呢?

function prompt_silent($prompt = "Enter Password:") {
  if (preg_match('/^win/i', PHP_OS)) {
    $vbscript = sys_get_temp_dir() . 'prompt_password.vbs';
    file_put_contents(
      $vbscript, 'wscript.echo(InputBox("'
      . addslashes($prompt)
      . '", "", "password here"))');
    $command = "cscript //nologo " . escapeshellarg($vbscript);
    $password = rtrim(shell_exec($command));
    unlink($vbscript);
    return $password;
  } else {
    $command = "/usr/bin/env bash -c 'echo OK'";
    if (rtrim(shell_exec($command)) !== 'OK') {
      trigger_error("Can't invoke bash");
      return;
    }
    $command = "/usr/bin/env bash -c 'read -s -p \""
      . addslashes($prompt)
      . "\" mypassword && echo \$mypassword'";
    $password = rtrim(shell_exec($command));
    echo "\n";
    return $password;
  }
}

echo prompt_silent();

参考:http://www.sitepoint.com/interactive-cli-password-prompt-in-php/

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

SBF胜博发娱乐老虎机PHP中require和include的问题。

( SBF胜博发娱乐老虎机 )

已知require和include都是引入文件。现在的很多框架都是单入口,在框架初始化的时候要require很多个类库和文件,问题是:

  1. require的文件最后放在内存里吗?
  2. 如果第一个问题成立,那么当很多人同时访问服务器的时候,a. 放在内存里的这些文件能给大家共享用吗?b. 还是每一个用户访问都重新开辟一块内存?

記得 php5.5 zend 出的 OpCode Cache 可以緩存免得重複編譯。

這時 1 和 2.a 都是成立的了。

而 2.b 是執行的時候的 context 不是 cache。cache 是公用的,context 是單獨的。

參見:https://support.cloud.engineyard.com/entries/26902267-PHP-Performance-I-Everything-You-Need-to-Know-About-OpCode-Caches

1.文件内容肯定不是放在内存,应该是按加载顺序编译。
2.每个用户请求都应该是独立的,需要重新加载和编译代码。

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

胜博发游戏官网空 MYSQL 表 PHP-PDO 插入数据总是提示重复

( 胜博发游戏官网 )

[10-Nov-2014 13:26:31 Asia/Shanghai]
PHP Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘o5z0Cj3s-fIVcmUnfbA0cc’ for key ‘openi” in W:\rcode_s2.php:69

为什么? 表示空的, 也运行过 TRUNCATE

PHP的致命错误:未捕获的异常’ PDOException的消息’ SQLSTATE [ 23000 ]:违反完整性约束:1062重复的条目的o5z0cj3s-fivcmunfba0cc”键“开放”W:\ rcode_s2 PHP:69。 表示空的??不会吧??

该答案已被忽略,原因:

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

SBF胜博发娱乐老虎机laravel 开发后台出现重定向循环

( SBF胜博发娱乐老虎机 )

我在使用laravel开发项目,但是目前遇到一个问题就是我在进入我的admin后台文件夹是,出现了重定向循环,不知道为什么

public目录里是否正好有个admin的文件夹?如果是,参考这里

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

sbf胜博发娱乐城PHP: 使用chr打印汉字

( sbf胜博发娱乐城 )

使用chr($i)可以顺利的打印出ASCII,但是,当$i>=19968(汉字的Unicode的起始值4E00的十进制)后,发现没法打印出汉字。
如:

<?php
    //代码1
    header('Content-Type: text/html; charset=utf-8');
    echo chr(19968);//汉字一的Unicode值:4E00
?>

虽然有其他方法,如:

//代码2
$character = html_entity_decode('&#x4e00;', ENT_QUOTES, 'UTF-8');

但为什么代码1没法打印出汉字?

ASCII根本就不包含汉字,
包含汉字的是GB2312-80,GBK,Big5,unicode
汉字是多字节,你用ord就会发现,只会返还汉字的首字节。

其实chr函数的源代码就在 /ext/standard/string.c
代码如下

PHP_FUNCTION(chr)

{
long c;
char temp[2];

if (ZEND_NUM_ARGS() != 1) {
    WRONG_PARAM_COUNT;
}

if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "l", &c) == FAILURE) {
    c = 0;
}

temp[0] = (char)c;
temp[1] = '\0';

RETURN_STRINGL(temp, 1, 1);

}
可以看到的是,就是C语言的字符强制转换。

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

胜博发游戏官网评论应该怎么读取?

( 胜博发游戏官网 )

数据库结构:

CREATE TABLE IF NOT EXISTS `Blog`.`comments` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '评论ID',
  `content` TEXT NOT NULL COMMENT '评论内容',
  `create_time` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '评论时间',
  `author` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '作者名称',
  `ip` VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'IP',
  `url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '网址',
  `email` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '邮箱',
  `agent` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '浏览器信息',
  `parent_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '父级ID',
  `status` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '状态',
  `article_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '评论的文章ID',
  PRIMARY KEY (`id`),
  INDEX `fk_article_comments_article1_idx` (`article_id` ASC))
ENGINE = MyISAM
COMMENT = '文章评论表';

相应文章的评论读出来以后,我用的递归把评论展示出来。
但是现在有个问题,比如我一页显示10个评论,要显示第一页,我现在把顶级评论读出来了,但是这些评论下的回复怎么查最优呢?(因为回复可能有很多级,所以我现在递归查询数据库已经。。。咳咳)

如果使用3个 id 呢, 一个是回复对象(上级回复) id, 一个是文章 id, 一个是顶级回复 id 呢, 这样可以用顶级回复 id 一次性去取全部的, 再根据时间排序好楼层, 还需要一个字段标记不是回复别人而是直接评论文章, 加入这个条件来分页

其实不建议盖那么多楼层, 一次就好, 想 sf 这样, 评论都在现在, 使用 @xxx 的方式就好, 当然直观性不如盖楼

也会引发出一些问题, 比如中间楼层被管理员删除等…

非常好的问题。

这种无限级的问题,其实有很多种解法,最简单但效率不一定是最低的实现方法就是递归。
在实际项目中,这样无限的盖楼和引用不会超过10层。
所以,在数据量可控的情况下其实是没有太大问题的。
但在分页时只取子评论ID,且最好把评论的结构存放到缓存中,在内存中排序量并不会很大。
基于现在的表结构,优化的方法则是加上一个字段,所有子评论ID,用逗号等分隔符连接直接,减少递归时的查询。

Mysql的数据类型很单一,换成或搭配Redis、Mongo、PostgreSql、oracle便可通过存储为格式化的数据结构简单解决。

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

SBF胜博发娱乐老虎机php静态类和model写法的问题

( SBF胜博发娱乐老虎机 )

现在开发用的tp框架
准备写个commonModel,里面放基础的增删改查
所有其他model继承这个model
有两个问题~
1、这个commonModel写成静态类是否合理
2、如果class A extends B , B是静态类, 那如何在A里调用B的方法
3、不介意的话各位可以把model贴出来看看大伙都怎么写的常用方法

hmm…好像是三个问题

A里调用B的方法用self::fun()这种形式

parent::functionName();

1.在子类中实现单例吧。或者用后期绑定在父类中定义单例方法。如果用静态,那么在子类中你怎么访问上下文$this?
2. 如果class A extends B , B是静态类, 那如何在A里调用B的方法:

  • B::foo()
  • parent::foo()
  1. 简单的CRUD直接用框架封装的方法吧。自己定义一个BaseModel主要还是解决 _before_inser/update/delte… 等问题。

那为什么不写成抽象类?

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

sbf胜博发娱乐城discuzX3 开启手机版,访问网站会自动判断是来自桌面端还是移动端,是怎么做的?

( sbf胜博发娱乐城 )

是在PHP中做的判断,还是在web server中做的?
是在index.php中吗?这个文件前面有对host做处理,但没看到和user agent有关的逻辑。想请教一下discuzX3是在什么地方,如何做判断的?
谢谢啦~

没看到和user agent有关的逻辑

你居然没找到!

function checkmobile() {
    global $_G;
    $mobile = array();
    static $touchbrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
                'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
                'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
                'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',
                'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
                'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
                'benq', 'haier', '^lct', '320x320', '240x320', '176x220', 'windows phone');
    static $wmlbrowser_list = array('cect', 'compal', 'ctl', 'lg', 'nec', 'tcl', 'alcatel', 'ericsson', 'bird', 'daxian', 'dbtel', 'eastcom',
            'pantech', 'dopod', 'philips', 'haier', 'konka', 'kejian', 'lenovo', 'benq', 'mot', 'soutec', 'nokia', 'sagem', 'sgh',
            'sed', 'capitel', 'panasonic', 'sonyericsson', 'sharp', 'amoi', 'panda', 'zte');

    static $pad_list = array('ipad');

    $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);

    if(dstrpos($useragent, $pad_list)) {
        return false;
    }
    if(($v = dstrpos($useragent, $touchbrowser_list, true))){
        $_G['mobile'] = $v;
        return '2';
    }
    if(($v = dstrpos($useragent, $wmlbrowser_list))) {
        $_G['mobile'] = $v;
        return '3'; //wml版
    }
    $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop');
    if(dstrpos($useragent, $brower)) return false;

    $_G['mobile'] = 'unknown';
    if(isset($_G['mobiletpl'][$_GET['mobile']])) {
        return true;
    } else {
        return false;
    }
}

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

sbf胜博发娱乐城curl在高并发的时候会不会出现不一致问题

( sbf胜博发娱乐城 )

我现在需要使用curl抓取一个网站的内容。如果在高并发情况下,因为延时,会不会出现前面的请求的response被后面的请求接收了,造成不一致的问题?

不会,TCP 协议决定了这种事情不可能发生。

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

sbf胜博发娱乐城网站中URL长链接转换为短链接的接口

( sbf胜博发娱乐城 )

比如使用新浪的接口 把http://segmentfault.com/ 生成 http://t.cn/hdus8i

我想在自己的网站内一些url生成短链接,但新浪API接口 在我网站内用程序请求了几下转换的接口,用了几下就不行了,好像是授权问题,有没有好用的接口?

如果要需要生成的短链重复度高,且不多的话,可以自己写一个嘛
其他家生成的短链大多数都是需要登陆的吧

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

胜博发游戏官网微信支付 刷新以后找不到openid

( 胜博发游戏官网 )

if (!isset($_GET['code']))
        {
            //触发微信返回code码
            $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
            Header("Location: $url"); 
        }else
        {
            //获取code码,以获取openid
            $code = $_GET['code'];
            $jsApi->setCode($code);
            $openid = $jsApi->getOpenId();
        }

$unifiedOrder->setParameter("openid","$openid");

刷新或者错误返回提示:

统一支付接口中,缺少必填参数openidtrade_typeJSAPI时,openid为必填参数!

题主的第一步 已经做了Oauth认证了.
是可以获到openid的…TX跳转的链接是 XXXX.com&code=123
然后通过 code 换取 openid..
code 如果未使用过生存周期只有5分钟
题主的流程是直接生产了 prepay_id 显示支付页面的..

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

SBF胜博发娱乐老虎机博客编辑窗口与后台的交互是如何实现的?

( SBF胜博发娱乐老虎机 )

很多博客网页的编辑页面都是php,这个交互是怎么实现的呢?

html页面是怎么把数据传送给后台的呢?后台又怎么把数据存储到数据库,然后又返回给前端的呢?

php,ajax,json这当中每一步都需要什么语言?不用asp或php,有可能实现吗?

你忽略了一个重要的东西:服务器

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

胜博发游戏官网PHP算法:如何把 00301.0050600变成正整数30100506

( 胜博发游戏官网 )


/** * @description 小数点变成正整数 * * @param $str * * @return mixed */ function toIntegerNum($str) { $str = preg_replace('/(\.\d+)([0]*)/' , '\\1' , $str); $str = str_replace('.' , '' , $str); return $str; } $s = 00301.0050600; var_dump(toIntegerNum($s)); //输出string '30100506' (length=8)

新修改

重新改写了一下,还有更好的方法吗

/**
 * @description 小数点变成正整数
 *
 * @param $str
 *
 * @return mixed
 */
function toIntegerNum($str)
{
    $arr = explode('.' , $str);

    if (!empty($arr[0])) {
        $arr[0] = ltrim($arr[0] , '0');
    }

    if (!empty($arr[1])) {
        $arr[1] = rtrim($arr[1] , '0');
    }

    return ltrim(implode('' , $arr),'0');
}

$s = '00301.0050600';
//$s = 00301.0050600;
//$s = 300;
$s = 0.00560000;
var_dump(toIntegerNum($s));

按状态来解析:

  1. 记录整数部分头部零:
    从前往后逐位解析一遍,记录头部零的位数,直到遇到非零值或结尾;
  2. 记录小数部分尾部零:
    如果有小数点,则从后往前逐位解析一遍,记录尾部零的位数,直到遇到非零值或小数点;
  3. 把头部零和尾部0全部刨除,最后去掉小数点。

LZ已经给出答案了啊=w=

<?php
    $a = 00301.0050600;

    echo str_replace('.', '', floatval($a));

return trim(str_replace('.','',$str),'0')

@tczzjin 的答案

$str = 00301.0050600;
echo intval(str_replace('.','',$str));

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

胜博发游戏官网协程就是goto吗?

( 胜博发游戏官网 )

协程就是goto吗?两者有何异同?

goto是在同一个函数中跳转,协程应该类似于setjumplongjump,这个是在不同函数间跳转。

这么说不准确,应该说协程一个主要功能就是跨函数的goto,当然,在需要时还能goto回来,这一点更像函数调用。

协程是一种计算机程序设计的组件,它范化了子例程的概念.协程非常适合用于实现一些有用的程序组件例如,协作式多任务,异常处理,事件循环,迭代器,无限链表和管道等.

下面对比一般的子例程和协程:

子例程的起始处是惟一的入口点,一旦退出即完成了子例程的执行,子例程的一个实例只会返回一次。

子程序总是在它的开始处被启动,它通常是一个固定的位置.共行程序总是在它上次结束处的下一位置被启动.

协程可以通过yield来调用其它协程。通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的。

子例程容易实现于堆栈之上,因为子例程将调用的其他子例程作为下级。相反地,协程对等地调用其他协程,最好的实现是用 continuations(由有垃圾回收的堆实现)以跟踪控制流程。

Marlin对coroutine的特性描述如下:

coroutine中的局部变量在后续调用中保持有效.

当控制离开的时候coroutine被挂起,将控制权交还给它的时候在它挂起的地方继续执行.

协程的分类

1)通过控制转移机制分类:对称协程与非对称协程

非对称协程(asymmetric),或称为半对称协程(semi-symmetric)或半协程(semi-coroutines).非对称协程可以被看作是调用者的从属过程,它们之间的关系跟调用和被调用例程的关系类似.

对称协程只提供了一种控制转移机制:将执行流程交给指定的协程.因为对称协程之间可以互相转移执行流程,所以它们之间的关系 就像在同一个层级.

2) 协程是否一级类型(first-class)

3) 是否有完整的栈

有完整栈的协程,允许协程在最内层的函数中挂起自己.以后此协程被resume将会从它被挂起的 地方继续执行.

没有完整栈的协程,例如python的generator,则只能在generator的主body中被挂起.

有完整栈的协程可以用于实现用户级多任务而没有完整栈的协程则不行.

协程的关键字是yield,个人觉得含义应该是:
中断执行,返回数据.再次调用,回到断点,恢复执行.
yield 等价于 return 并且 goto breakpoint.

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

sbf胜博发娱乐城java 程序运行过程中如何进行内存分配的或者介绍下内存分配的过程

( sbf胜博发娱乐城 )

面对这样的面试题:
java 程序运行过程中如何进行内存分配的或者介绍下内存分配的过程,请详细描述,谈谈你的理解!
我第一时间想到的是堆栈相关的知识点考察,所以面试的过程中通过一个例子说明了一下,很简短的说完了,感觉面试官不太满意,各位如果遇到类似的问题,该如何回答才能得到面试官加分!
Java 内存区域详解有没有结合这个回答的必要。

  • 内存分配首先要知道内存的数据区域有哪些?
    虚拟机栈,程序计数器,堆,方法区,本地方法区。
  • 知道了内存分配主要在堆上进行后,由于垃圾回收机制的存在,具体又是怎么分配的?
    堆分为新生代,老年代,永久代。
    对象分配主要在新生代中的Eden区域中,如果经过多次GC对象还存活,那么对象将进入老年代。如果启动了本地线程分配缓冲,则按线程优先在TLAB中分配。大型对象直接分配到老年代。
  • 为什么大型对象直接分配到老年代?
    新生代的垃圾回收机制采用复制算法(复制算法的问题)。
  • 空间分配担保是怎么回事?
    在新生代的对象有可能提前进入老年代。
  • 对象在内存中的布局是怎样的?
    Java内存区域详解

以上都是基本的内存分配问题,每个都可以深入下去。
由于jvm垃圾自动回收技术的存在,以上问题都是需要解决的。
我也在学习,大家可以相互探讨共同进步。

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

SBF胜博发娱乐老虎机为什么是List list = new ArrayList(),而不直接用ArrayList

( SBF胜博发娱乐老虎机 )

如题,安卓新手,经常看到这样的写法 不知道为什么

这里你只需要搞清楚一个概念,叫做向上转型。

List是接口而ArrayList与LinkedList为他具体的两个实现类。

ArrayList与LinkedList实现了List接口中定义的通用方法,
但是根据自己的需要也实现了一些List中没有定义的方法。

当你在使用List list = xxx;的时候,代码表达的语义为:

我需要一个实现了List接口的实现类对象。
具体是哪种实现,我们并不关心。
因为List接口中定义的方法足够我们使用。
这时,这种定义方式,就会发生向上转型。
由具体类型向上转为通用的接口类型。
但是,伴随向上转型时会发生信息丢失,也就是说,
你拿到的这个对象中仅仅只能访问到List接口中定义的成员方法,
而具体实现类新增的扩展方法将会丢失。

所以,在你需要使用一些特殊方法时定义对象需要明确对象类型。

在通用接口提供的内容足以满足当前需求时,就可以向你题目中描述的那样定义。十分方便。

编辑器太难用了。凑合看吧。。

面向接口编程思想。

首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。

// 1.这样你就只能调用List接口里面定义好的方法,而不能使用你自己在ArrayList扩展的方法。
     List list = new ArrayList();
     
// 2.这样你可以使用自己在ArrayList类上扩展的方法
    ArrayList list = new ArrayList();

// 接口就是定义了一些行为,它要求你应该做什么。
// 假如你采用了面向接口编程方式,也就是第一种方式:List list = new ArrayList();
// 就能通过接口很大限度上规范开发人员的实现规则,因为你现在只能调用接口的方法。

讲的不是很好,建议参考一下:http://dev.yesky.com/298/8080298.shtml

因为你不需要用到ArrayList自带的一些方法,你只需要用List这种容器所应该带的方法,如果你发现ArrayList在你的应用中不适合,完全可以在定义处另定义实现了List接口的类。

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

胜博发游戏官网JAVA接口对象为空时,调用接口方法,程序没报错

( 胜博发游戏官网 )

这个问题源于在我们公司内部移动产品开发框架上看到的一段代码,总结模拟出来,大概的定义和调用情况如下:

ITest 接口

public interface ITest {

    public void eat();
    public void shout();

}

Model类 (一个普通的类,并且类内部没有实现任何功能)

public class Model {

    public static ITest getModel() {
        return null;
    }

}

主程序 JTest类

public class JTest {

    public static void main(String[] args) {
        ITest test = Model.getModel();
        test.eat();
        test.shout();
        System.out.println("hahah");

    }
}

按正常的理解,这个肯定会在test.eat()处报NullPointerException, 而我测试过后也正是如此。但问题是在使用此框架进行开发时,程序运行到相关模块,并没有报错。

所以,想请教一下,JAVA是不是有什么机制或者模式能让这种调用方式可行,而这种调用方式又有什么作用呢?由于找不到写这部分代码的同事,所以,这个问题相当困扰,也觉得蛮有趣的。

跪求大神指导。

如果你确定使用框架时执行test.eat();又没报错那确实有意思。
也有可能是框架把异常吞了没向上抛

我敢说 肯定是你代码没有看完. 如果返回一个null那这就是完全无意义的代码, 如果真的是这样, 你删了项目还正常么…
getModel 方法肯定是返回的 接口实现的对象.
你可以去搜一下 那个接口实现的类. 仔细看一下那个 getModel方法相关类的 配置文件之类的.
看仔细… 不会有这么神奇的事发生的…

不可能为空的。如果没有报错的话,必然是框架为你捕获了异常处理。

我感觉你应该是跟错代码了,你断点调试可以看到执行ITest test = Model.getModel();完之后得到的是什么

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…