小编Ali*_*Ali的帖子

如何对PHP特征进行单元测试

我想知道是否有关于如何对PHP特征进行单元测试的解决方案.

我知道我们可以测试一个使用该特性的类,但我想知道是否有更好的方法.

在此先感谢任何建议:)

编辑

另一种方法是在测试类本身中使用Trait,因为我将展示下面的内容.

我并不热衷于这种方法,因为没有保证在特征,类和PHPUnit_Framework_TestCase(在本例中)之间没有类似的方法名称:

这是一个示例特征:

trait IndexableTrait
{
    /** @var int */
    private $index;

    /**
     * @param $index
     * @return $this
     * @throw \InvalidArgumentException
     */
    public function setIndex($index)
    {
        if (false === filter_var($index, FILTER_VALIDATE_INT)) {
            throw new \InvalidArgumentException('$index must be integer.');
        }

        $this->index = $index;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getIndex()
    {
        return $this->index;
    }
}
Run Code Online (Sandbox Code Playgroud)

及其测试:

class TheAboveTraitTest extends \PHPUnit_Framework_TestCase
{
    use TheAboveTrait;

    public function test_indexSetterAndGetter()
    {
        $this->setIndex(123);
        $this->assertEquals(123, …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing traits

36
推荐指数
3
解决办法
2万
查看次数

如何在Mac上为PHP7设置XDebug?

我已经使用Homebrew ie 在我的mac上安装了PHP 7

$ brew install php70
Run Code Online (Sandbox Code Playgroud)

另外我想在我的机器上安装XDebug.

理想情况下,我希望有一个简单的解决方案,如再次使用brew,但不幸的是,似乎没有这样的公式存在(至少尚未),最新的包是homebrew/php/php56-xdebug.

我想在开始手动安装之前,请在此处查看是否还有其他解决方法.

任何建议将不胜感激.

macos homebrew xdebug php-7

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

由于无法使用词法变量$ eventName作为参数名称,Laravel CLI无法创建新应用程序

使用composer using composer global require "laravel/installer"命令成功安装Laravel的安装工具后,第一次尝试通过运行创建应用程序laravel new app-name失败并显示以下输出,任何建议都将受到赞赏:)

Crafting application...
PHP Fatal error:  Cannot use lexical variable $eventName as a parameter name in /Users/ABN/.composer/vendor/guzzlehttp/guzzle/src/Event/Emitter.php on line 48
PHP Stack trace:
PHP   1. {main}() /Users/ABN/.composer/vendor/laravel/installer/laravel:0
PHP   2. Symfony\Component\Console\Application->run() /Users/ABN/.composer/vendor/laravel/installer/laravel:13
PHP   3. Symfony\Component\Console\Application->doRun() /Users/ABN/.composer/vendor/symfony/console/Application.php:126
PHP   4. Symfony\Component\Console\Application->doRunCommand() /Users/ABN/.composer/vendor/symfony/console/Application.php:195
PHP   5. Laravel\Installer\Console\NewCommand->run() /Users/ABN/.composer/vendor/symfony/console/Application.php:878
PHP   6. Laravel\Installer\Console\NewCommand->execute() /Users/ABN/.composer/vendor/symfony/console/Command/Command.php:259
PHP   7. Laravel\Installer\Console\NewCommand->download() /Users/ABN/.composer/vendor/laravel/installer/src/NewCommand.php:52
PHP   8. GuzzleHttp\Client->get() /Users/ABN/.composer/vendor/laravel/installer/src/NewCommand.php:125
PHP   9. GuzzleHttp\Client->createRequest() /Users/ABN/.composer/vendor/guzzlehttp/guzzle/src/Client.php:125
PHP  10. GuzzleHttp\Client->getEmitter() /Users/ABN/.composer/vendor/guzzlehttp/guzzle/src/Client.php:115
PHP  11. spl_autoload_call() /Users/ABN/.composer/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php:15
PHP  12. Composer\Autoload\ClassLoader->loadClass() …
Run Code Online (Sandbox Code Playgroud)

composer-php laravel-5.4

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

我可以使用array_map等数组函数设置数组的键

我非常喜欢使用数组映射从另一个对象数组创建对象数组的函数式编程风格.

$newObjects = array_map(
  function($oldObject) {
    return new NewObject($oldObject);
  },
  $oldObjects
);
Run Code Online (Sandbox Code Playgroud)

这一切都运行正常,但我真的希望能够设置数组的索引,使它们是原始对象的id,以便于从数组中搜索和检索,但我想不出如何做其他的那么不是优雅.

$newObjects = array();
foreach ($oldObjects as $oldObject) {
  $newObjects[$oldObject->getId()] = new NewObject($oldObject);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以做到这一点?

php arrays iterator functional-programming array-map

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

如何在phpmailer中嵌入图像 - 我不能这样做,为什么?

我想在phpmailer中将图像包含到我的消息中.以下是我的代码,Mails正在发送但没有嵌入的图像,而是它们似乎被附加到电子邮件.不确定我的代码有什么问题,请帮忙吗?

<!doctype html>
<html>
<head>
<meta charset="UTF-8">

<?php
    require_once('class.phpmailer.php');   
    require_once('class.smtp.php');    
    $mail = new PHPMailer();   
    $mail->CharSet = "UTF-8";
    $mail->From = "xxxxx";    
    $mail->FromName = "Jan Nowak";   
    $mail->AddReplyTo('xxxx'); 

    $mail->Host = "xxxxxx";  
    $mail->Mailer = "smtp";   
    $mail->SMTPAuth = true;    
    $mail->Username = "xxxxx";    
    $mail->Password = "xxxxxx";    
    $mail->Port = xxx;  us?ugi poczty
    $mail->Subject = "temat";    
    $mail->Body = 'tre?? maila';    

    $mail->IsHTML(true);
    $mail->AddEmbeddedImage('images/Kartka.png', 'Kartka');
    $mail->Body = "<h1>Test 1 of PHPMailer html</h1><p>This is a test</p>";
        "<p>This is a test picture: <img src=\"images/Kartka.png\" /></p>";


     //$mail->addAttachment ('images/Kartka.jpg'); 
    $mail->AddAddress ("xxxxx");    

     if($mail->Send())    
        {                      
        echo …
Run Code Online (Sandbox Code Playgroud)

php embed phpmailer

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

关于PHP的fseek()方法,究竟是什么偏移(位置)?

也许它是我的英语,但PHP手册中的解释(引用贝娄)并不能很清楚地回答我的问题.

要移动到文件结尾之前的位置,您需要在偏移量中传递负值并将其设置为SEEK_END.

我有一个文件,我需要写它(让我们说)第5行.我应该如何锻炼正确的偏移?

我知道它不仅仅是(5)行号.所以我猜测现有数据的总长度直到第5行的开头.如果是这样,每行文件有任何特定长度,或者(很可能)它是基于行的内容的变量?如果它的变量应该如何找到它?

任何建议将不胜感激.

php fseek file-handling

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

为PHPUnit的模拟对象定义类型

我想知道是否可以使用phpdoc来定义特定范围内的某个对象(仅在方法内)作为PHPUni的Mock,所以在该方法中我可以利用类型提示,例如 - > expected, - > methods等等就像你刚刚创建模拟而不将其解析为真正的类一样.

这是一个示范:

class someTest extends PHPUnit
{
    // here, usually we define the real class (SomeClass in this example)
    /** @var SomeClass */
    private $someMock;

    public function setUp()
    {
        $this->someMock = $this->getMock(SomeClass::class);
    }

    public function testSomethingInSomeClass()
    {
        // here i expect the type hint i defined in the beginning of this test class and its fine
        $a = $this->someMock->someMethodFromSomeClass();
    }

    private function setSomeMethodOnMock()
    {
        // but here i would like to have …
Run Code Online (Sandbox Code Playgroud)

php phpunit phpdoc

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

如何从另一种方法继承 phpdoc(不是我们要覆盖的方法)

如果有一种方法可以在相同和/或不同类中的不同方法上复制(继承)完全相同的 phpdoc,我就在徘徊。

我知道内联 {@inheritdoc},它只提供从父类到其子类的继承(正如人们所期望的:)。

但是看看下面,我必须在 3 个不同的地方复制完全相同的描述,在同一个类中的 2 个方法和在单独的类中的一个(不是继承而是启动)。我想知道是否有一种方法可以做到这一点,而无需复制粘贴。

class Example
{
    /**
     * here i want to have exactly the same phpdoc,
     * like what i created for getMeSomethingFromTheShelf() in the same class
     */
    public function getMeSomething($id, $option = [])
    {
        return $this->getMeSomethingFromTheShelf($id, $option);
    }

    /**
     * Some description
     * and some more detail about how the $option value will be used
     *
     * @param int $id
     * @param array $option and here some we have some …
Run Code Online (Sandbox Code Playgroud)

php phpdoc

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

确定PHP数组中的所有值是否为空

我正在寻找性能最友好的方法来检查数组中的所有值是否为空,或者它是否至少有一个元素与其他类型.

即我需要一个名为containsOnlyNull($ array)的方法,它根据传递的数组返回布尔值

例如:

$a = containsOnlyNull([null,null,null,null,null]);
$b = containsOnlyNull([null,null,1,null,null]);

// $a will be true
// $b will be false
Run Code Online (Sandbox Code Playgroud)

任何建议将被认真考虑 :)

php arrays

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

具有两种可能的数组类型的Typescript rest参数

我想定义一个带有字符串或对象的rest参数的函数,签名如下:

public static fn(...messages: string[] | object[]): void;
Run Code Online (Sandbox Code Playgroud)

但是不幸的是,这会导致TS2370编译错误

错误TS2370:rest参数必须是数组类型。

我知道像这样的单一类型的数组string[]还是object[]可以正常工作,但是重载此类函数会带来更大的代价。

无论如何,我可以使上述功能与所需的签名一起使用吗?

overloading typescript

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