标签: php-8

语法错误,意外标记“<<”,需要“function”或“const”

我在将本地开发环境升级到 php8 后阅读了这篇文章。

并在我的班级中实现它,例如:

<<Attribute('foo')>>
public function index()
{
    $posts = (new Post)->get()->withMany('image');

    return $this->app()->view('index', compact('posts'));
}
Run Code Online (Sandbox Code Playgroud)

它返回错误。

语法错误,意外标记“<<”,需要“function”或“const”

在 php8 中这样做的真正正确之处是什么?我错过了什么吗?

php php-8

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

无法在 PHP 的 docker 映像中安装 JSON 扩展

我最近开始将我的项目从 PHP 7.4 升级到 8.0,我目前正在尝试将我所有的 Docker 镜像也重建到 PHP 8.0,以便我的镜像和我的环境保持一致。

在这次升级之前,我正在使用php:7.4, 在我的 Dockerfile 中,我有这一行用于扩展安装:

RUN docker-php-ext-install mysqli pdo pdo_mysql json
Run Code Online (Sandbox Code Playgroud)

今天,同样的命令工作EXCEPT为JSON,在那里我得到以下错误:

Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20200930/
cp: cannot stat 'modules/*': No such file or directory
make: *** [Makefile:87: install-modules] Error 1
Run Code Online (Sandbox Code Playgroud)

我在 Stack Overflow 或一般的网络上找不到其他有此问题的人,所以...名称已更改,还是不再需要?或者它甚至是正常的?

php json docker php-8

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

PHP 8 中的“TypeError: implode(): Argument #2 ($array) 必须是 ?array 类型,给定字符串”

<div class="form-group col-md-8" id="my" style="display: none;">
    <label>Choose Vpn Server</label>
    <div class="row">
        <?php
            $sqlUrl4 = "SELECT * FROM vpn_networks";
            $result4 = myQuery($sqlUrl4);

            while ($row4 = myFetchArray($result4)) {
        ?>
        <div class="col-sm-4 text-center">
            <label>
                <input type="checkbox" name="vpn_network[]" value="<?php echo $row4['id'];?>" id="iptv" />
                <?php echo $row4['title'];?>
            </label>
        </div>
        <?php
                    }
                ?>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)
$vpn1 =implode(',', $_POST['vpn_network']?? '');
Run Code Online (Sandbox Code Playgroud)

错误:

Fatal error: Uncaught TypeError: implode(): Argument #2 ($array) must
be of type ?array, string given in
C:\xampp\htdocs\ideology\partnerprocess.php:22 Stack trace: #0
C:\xampp\htdocs\ideology\partnerprocess.php(22): implode(',', '') #1
{main} thrown …
Run Code Online (Sandbox Code Playgroud)

php php-8

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

参考 - 升级 PHP 后 Composer 错误“您的 PHP 版本不满足要求”

将 PHP 从 7.4 更新到 8.0 后,我composer update在现有项目上运行,出现如下错误:

  • acme/some-package[1.0.0, ..., 1.4.0] 需要 php ^5.6.4 || ^7.0 -> 您的 php 版本 (8.0.3) 不满足该要求。

这是什么意思,我该如何解决?

(这是一个参考答案,旨在涵盖一个经常遇到的问题。场景只是一个例子。另见:“如何解释 Composer 的错误日志? ”)

php composer-php php-8

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

使用 Docker for Laravel Vapor 在 php8 上安装 Imagick

我看到一些帖子让 Imagick 使用 Docker 镜像在 php 8 上工作,并从 Imagick 存储库提交。Imagick 尚未正式支持 php 8,因为它没有通过其他测试,但可以按原样在 php 8 上运行。

需要一个指针来让它在我的本地工作,然后到 Laravel Vapor。这应该在 Dockerfile 中起作用,但docker-php-ext-install在运行时找不到sail build

更新:这适用于 Vapor。staging.dockerfile 应该如下所示:

FROM laravelphp/vapor:php80

ARG IMAGICK_LAST_COMMIT='448c1cd0d58ba2838b9b6dff71c9b7e70a401b90'
RUN  mkdir -p /usr/src/php/ext/imagick \
    && curl -fsSL https://github.com/Imagick/imagick/archive/${IMAGICK_LAST_COMMIT}.tar.gz | tar xvz -C /usr/src/php/ext/imagick --strip 1 \
    && sed -i s/'#define PHP_IMAGICK_VERSION    "@PACKAGE_VERSION@"'/'#define PHP_IMAGICK_VERSION    "3.4.5rc"'/ /usr/src/php/ext/imagick/php_imagick.h \
    && docker-php-ext-configure imagick \
    && docker-php-ext-install imagick 

COPY . /var/task
Run Code Online (Sandbox Code Playgroud)

所以我仍然面临的问题是将其纳入我的本地。使用帆构建

imagick docker laravel-vapor php-8

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

abs():参数 #1 ($num) 必须为 int|float 类型,给定字符串

我想预览 pdf,但更新到 php 8 和一些软件包更新后打不开。
这段代码来自 laravel

function konversi($x)

    {

        $x = abs($x);

        $angka = array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan",   "Sembilan", "Sepuluh", "Sebelas");

        $temp = "";

 
> if ($x < 12) {// Notif from laravel in this line


            $temp = " " . $angka[$x];

        } else if ($x < 20) {

            $temp = konversi($x - 10) . " Belas";

        } else if ($x < 100) {

            $temp = konversi($x / 10) . " Puluh" . konversi($x …
Run Code Online (Sandbox Code Playgroud)

php php-8

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

在 PHP 8 中使用 call_user_func 返回致命错误

我试图使用函数 handleContact 调用名为 ContactController 的类,但出现以下错误call_user_func([ContactController::class, 'handleContact']);

致命错误:未捕获错误:无法静态调用非静态方法 app\controllers\ContactController::handleContact()

<?php
namespace app\controllers;

class ContactController {
    public function handleContact() {
        return 'Hello World';
    }
}
Run Code Online (Sandbox Code Playgroud)

php php-8

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

Doctrine ORM 2.9同时使用AnnotationDriver和AttributeDriver来解析实体元数据

最近我们将应用程序升级到 PHP8。

由于PHP8引入了属性doctrine/orm从版本开始支持它们,2.9因此利用此功能增量(即不是一次所有实体)将实体元数据更新为属性格式似乎是个好主意。

为此,我需要以某种方式注册两者Doctrine\ORM\Mapping\Driver\AnnotationDriverDoctrine\ORM\Mapping\Driver\AttributeDriver解析元数据。

棘手的部分是为一组使用注释或属性修饰的实体注册两个解析器。从这一点来看,Doctrine\ORM\Configuration我所需要的似乎是不可能的。

我是否正确(假设这无法合理实现)或者可以通过某种不太黑客的方式来完成吗?

php doctrine-orm php-8 php-attributes

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

PHP `error_reporting` 的默认值是多少?

我知道这些error_reporting值的含义。我知道-1意思是“显示全部”,0意思是“不显示”。

但是当用户没有指定任何内容时,没有任何地方指定默认设置的值是什么。

尝试phpinfo()我看到

...
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => (none)
...
Run Code Online (Sandbox Code Playgroud)

那么,鉴于没有php.ini加载,默认值/行为是什么error_reporting

php documentation default error-reporting php-8

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

如何让 PHP 8 支持与类同名的构造函数?

我有一个遗留项目正在迁移到 PHP 版本 8,但新的 PHP 版本不支持基于类名命名的类构造函数,这在旧版本中有效。

我希望这样的课程继续工作:

class Person {
    
    private $fname;
    private $lname;
    
    // Constructor same class name here
    public function Person($fname, $lname) {
        $this->fname = $fname;
        $this->lname = $lname;
    }
    
    // public method to show name
    public function showName() {
        echo "My name is: " . $this->fname . " " . $this->lname . "<br/>"; 
    }
}

// creating class object
$john = new Person("John", "Wick");
$john->showName();
Run Code Online (Sandbox Code Playgroud)

php php-8

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