Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro de sintaxe?

Escrevi o código da mesma maneira que o instrutor e recebi 2 erros fatais.

Cannot use positional argument after named argument

Unknown named parameter 'time'


<?php

use Alura\Pdo\Domain\Model\Student;

require_once 'vendor/autoload.php';

$databasePath = __DIR__ . '/banco.sqlite';
$pdo = new PDO(dsn:'sqlite:' . $databasePath);

$student = new Student(id:null, name:'Vinicius Dias', new \DateTimeImmutable(time:'1997-10-15'));

$sqlInsert = "INSERT INTO students (name, birth_date) VALUES ('{$student->name()}', '{$student->birthDate()->format(format: 'Y-m-d')}');";

echo $sqlInsert;
2 respostas

Olá Pedro,

Remove esses dsn:, id:, nome: e time: que deve resolver o problema, isso é apenas uma ajuda visual do editor para indicar o nome do parâmetro. O código final fica assim:

<?php

use Alura\Pdo\Domain\Model\Student;

require_once 'vendor/autoload.php';

$databasePath = __DIR__ . '/banco.sqlite';
$pdo = new PDO('sqlite:' . $databasePath);

$student = new Student(null, 'Vinicius Dias', new \DateTimeImmutable('1997-10-15'));

$sqlInsert = "INSERT INTO students (name, birth_date) VALUES ('{$student->name()}', '{$student->birthDate()->format('Y-m-d')}');";

echo $sqlInsert;

Espero ter ajudado, qualquer coisa é só falar!

solução!

Opa, Pedro. É isso que o Lucas falou. Isso que você digitou a mais eram apenas auxílios visuais que minha IDE estava mostrando. Repare que eu não os digito em nenhum momento nos vídeos. :-)

Porém a partir do PHP 8 essa sintaxe passou a ser válida, mas aí você precisaria informar o nome de todos os parâmetros. Se quiser saber mais sobre essa "novidade": https://www.youtube.com/watch?v=epla4NyobjU

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software