小编rdl*_*rey的帖子

使用PHPUnit模拟未在测试类中指定的以编程方式确定的方法

使用PHPUnit 3.6我试图exec()在下面的控制器类中测试该方法.这个方法做了两件事:

  1. 根据对象的现有属性确定要调用的方法的名称,并...
  2. 如果确定的控制器方法是可调用的,则执行它,如果不是,则该方法抛出异常

(简化)源代码如下所示:

abstract class CLIController extends Controller
{
  /* irrelevant class details here */

  public function exec()
  {
    $action = ! empty($this->opts->args[0])
      ? $this->opts->args[0]
      : $this->default_action;

    if ( ! $action || ! is_callable(array($this, $action))) {
      $msg = 'Invalid controller action specified';
      throw new LogicException($msg);
    } else {
      $this->$action(); // <---- trying to get code coverage on this line!
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是......

我无法弄清楚如何覆盖这部分代码:

} else {
  $this->$action();
}
Run Code Online (Sandbox Code Playgroud)

因为我不确定如何(或甚至可能)测试一个方法的调用,该方法的名称在抽象类的上下文中是未知的.再次:要调用的方法在子类中声明.通常我会模拟一个抽象方法,但在这种情况下我不能,因为该方法尚不存在 - 它将由子类指定. …

php phpunit unit-testing

5
推荐指数
1
解决办法
1460
查看次数

使用PHPUnit测试辅助函数

假设我想测试一个简单的帮助器,它将类名作为参数并进行重定向.

如果在几个控制器内部的许多地方调用该函数,我该如何测试?我应该测试在整个代码中作为参数传递的每个类名(自己在提供者函数中写入)吗?或者是否有一个神奇的功能为我做到这一点?

php phpunit

5
推荐指数
1
解决办法
1983
查看次数

在PHP中,通过引用传递大量数据而不是通过值传递资源是否更少(更聪明)?

可能重复:
在PHP(> = 5.0)中,更快地通过引用传递?

假设我正在处理一个大数据(有多大并不重要)数据数组并将其传递给函数.当然,它将通过值传递,而不是默认情况下通过引用传递.好的,我知道.

所以我的问题是:

如果存储在此数组中的数据足够大,则可以通过将数据存储在对象(例如,stdClass)中或通过使用foo(&$ myData)来获得有价值的性能或内存使用增益,以便通过引用传递数据而不是价值?

我的理解是,当它通过值传递时,PHP将创建一个全新的指针,指向数据的全新内存分配,而传递的值变量存在于函数范围中.在这种情况下,由于这个原因,可能通过引用传递大量数据是值得的吗?我不知道这种理解是否正确......这是问题的一部分.

注意:这是一个假设,所以不要提出任何关于"过早优化","你最好在最小化磁盘I/O然后再担心这个","取决于你有多少RAM","等等."

UPDATE

还有一个问题:假设数据被传递给一个对象构造函数,以便存储为该对象的一个​​属性,并且它会以一些小的方式被修改,因为它存储在新对象的属性中.那么操作的内存使用方面是否会有显着差异?假设最好以目标格式定义数据以避免因改变数据线而产生的成本,这是正确的吗?

php

4
推荐指数
2
解决办法
286
查看次数

在主机标头不匹配的虚拟主机环境中返回400

考虑一个服务于三个虚拟主机的Web服务器:

  • mysite.com
  • myothersite.com
  • imnotcreative.com

现在假设服务器收到以下原始请求消息(代码格式化删除了终止\r\n序列):

GET / HTTP/1.1
Host: nothostedhere.com
Run Code Online (Sandbox Code Playgroud)

关于如何响应当前服务器上不存在的主机名请求,我没有在RFC 2616中看到任何指导(也许我错过了?).例如,Apache只会将其配置中定义的第一个虚拟主机用作"主要主机",并假装客户端请求该主机.显然,这比返回400 Bad Request响应更有效,并保证客户端总能看到一些表示.

所以我的问题是......

400如果客户端在使用HTTP/1.1协议时请求不存在的主机,那么除了"健壮性与正确性"参数之外,任何人都可以提供理由来阻止我对(或其他错误代码)做出响应吗?


请注意,所有HTTP/1.1请求必须Host:根据RFC 2616 指定标头.对于HTTP/1.0请求,唯一真正的选项是提供"主"主机结果.此问题专门针对HTTP/1.1协议请求.

http

3
推荐指数
1
解决办法
3228
查看次数

VIM:从一个文件中抽取并在另一个文件中搜索

在我打开文件include()ed后gf,如何将该文件中的文本复制到原始文件的搜索功能中?

例如,如果我正在处理PHP文件并且它有一行:

include("someFile.php");
Run Code Online (Sandbox Code Playgroud)

我会把光标放在上面someFile.php并按下gf.在那个文件中,我看到了文字function reallyLongFunctionName() {}.我想在原始文件中搜索该函数.我可以复制函数名称v然后再Ctrl-O回到原始文件,但现在我该如何执行搜索?

谢谢!

vim search

2
推荐指数
1
解决办法
131
查看次数

无法使用变量来访问数组中的值以指定索引

我有以下代码:

$id = $_GET['id'];

echo '<br>' . 'id: ' . $id . '<br><br>';

echo '<pre>';
            print_r($itemQtys);
echo '</pre>';

echo '<br>' . 'itemqtys[id]: ' . $itemQtys[$id] . '<br>';

echo '<br>' . 'id: ' . $id . '<br>';
Run Code Online (Sandbox Code Playgroud)

输出是:

id:5

数组
(
[5] => 12
)

itemqtys [ID]:

id:5

如您所见,当我尝试使用$ id变量作为键访问数组中的值时,不返回任何值.但是,当我这样做时:

echo '<br>' . 'itemqtys[5]: ' . $itemQtys[5] . '<br>';
Run Code Online (Sandbox Code Playgroud)

结果是:

itemqtys [5]:12

为什么我不能使用变量来指定数组中的索引?

php

2
推荐指数
1
解决办法
1691
查看次数

PHP:如果指定的图像不存在,如何显示默认图像?

我正在做一个小项目,我需要在我的数据库中显示作者的每个作者的图像.窥视下面的代码:

- QUERY--

$getboth_sql = mysql_query(

"SELECT lyrics.lyrics_id, lyrics.lyrics_title, lyrics.lyrics_text,artists.artist_nane,artists.artist_id
FROM lyrics,artists
WHERE lyrics.artist_id = artists.artist_id
ORDER BY lyrics.lyrics_title");

while ($both = mysql_fetch_assoc($getboth_sql)) {

    $lyrics_id = $both[lyrics_id];
    $lyrics_title = $both[lyrics_title];
    $lyrics_text = $both[lyrics_text];
    $artist_name = $both[artist_nane];
    $artist_id = $both[artist_id];

    ?>
    <div class="artimg"><img src="images/artists/<?php echo $artist_name;?>.jpg"  height="50px" width="50px"/></div>        



    <?php
}//END While
Run Code Online (Sandbox Code Playgroud)

上面的代码可以正常工作但是如果我没有在'artists'目录中保存图像,那么该图像就不会出现图像.

<div class="artimg"><img src="images/artists/<?php echo $artist_name;?>.jpg"  height="50px" width="50px"/></div>
Run Code Online (Sandbox Code Playgroud)

问题:如果找不到指定的打开,显示默认图像的最佳方法是什么.

我一直在玩空文件和存在的函数,但我没有把它弄好.请帮忙.

PS如果这个问题看起来很愚蠢,我不是专业人士!

php mysql image

1
推荐指数
1
解决办法
1万
查看次数

异常的正确HTTP状态是什么?

如果我的脚本抛出异常,我应该返回什么HTTP状态?

200好的

要么

500内部服务器错误

假设用户请求参数是正确的,但我的脚本中存在一个错误,导致出现错误消息而不是正确的响应(XML,JSON或其他格式).什么应该是HTTP状态?

http http-status

0
推荐指数
1
解决办法
232
查看次数

PHP表单 - 未定义的常量'PHP_SELF'

我有一个联系表单,它在我的服务器上托管时工作正常,但是当我将它上传到我的客户端服务器时,我遇到了问题.请查看此处的页面:http://www.conceptonegfx.com/contact.php

我在表单顶部收到以下错误

注意:使用未定义的常量'PHP_SELF' - 在第42行的E:\ Domains\c\conceptonegfx.com\user\htdocs\fns.php中假定为''PHP_SELF''

注意:未定义的索引:第42行的E:\ Domains\c\conceptonegfx.com\user\htdocs\fns.php中的'PHP_SELF'"id ="uploadform"enctype ="multipart/form-data">

以下是fns.php上的问题:

 <?php
//start session
 if(!isset($_SESSION)) 
 { 
 session_start(); 
 }  


  // prints form
   function print_form(){
   ?>


<form method="post" class="action="<?php echo $_SERVER[’PHP_SELF’];?>" id="uploadform" enctype="multipart/form-data">
<p><label for="namefrom">Name <span class="required">*</span></label>
<input name="namefrom" id="namefrom" type="text" class="field" value="<?= $_SESSION['myForm']['namefrom']; ?>" tabindex="1"/></p>

<p><label for="emailfrom">Email <span class="required">*</span></label>
<input name="emailfrom" id="emailfrom" type="text" class="field" value="<?= $_SESSION['myForm']['emailfrom']; ?>" tabindex="3"/></p>

<p><label for="phone">Phone</label>
<input name="phone" id="phone" type="text" class="field" value="<?= $_SESSION['myForm']['phone']; ?>" tabindex="4"/></p>

<p><label for="message">Message <span class="required">*</span></label>
<textarea name="comments" id="comments" rows="10" cols="35" …
Run Code Online (Sandbox Code Playgroud)

html php forms self submit

0
推荐指数
2
解决办法
9165
查看次数

服务器无法确定此原始HTTP消息的长度

我正在尝试使用PHP中的套接字将分块的POST数据流式传输到本地服务器进行测试.如果我不对请求实体主体进行分块并提供Content-Length头,则此方法可以正常工作.

但是,当我按如下方式对传输进行分块时,服务器无法识别消息的结尾.下面的原始消息有什么问题阻止服务器正确识别消息是否完整?

POST / HTTP/1.1
HOST: localhost
CONTENT-TYPE: text/plain
USER-AGENT: testing
ACCEPT-ENCODING: gzip,deflate,identity
TRANSFER-ENCODING: chunked

36
When in the chronicle of wasted time
0
Run Code Online (Sandbox Code Playgroud)

在最后'0'之后有2x CRLF,所以最后5个字节是:0x30, 0x0D, 0x0A, 0x0D, 0x0A.

我已经尝试将此请求发送到本地Apache服务器和PHP5.4的内置测试服务器.两者都无法确定请求是否完成,并且执行会挂起,直到套接字超时.

php post http chunked-encoding

0
推荐指数
1
解决办法
86
查看次数

标签 统计

php ×7

http ×3

phpunit ×2

chunked-encoding ×1

forms ×1

html ×1

http-status ×1

image ×1

mysql ×1

post ×1

search ×1

self ×1

submit ×1

unit-testing ×1

vim ×1