PHP pthreads объектная переменная неинициализирована

#php #c #pthreads

#php #c #pthreads

Вопрос:

Я только что установил pthreads для PHP. Однако, когда я создал объект класса thread. Переменные-члены объекта неинициализируются при создании объекта. Я не знаю почему, это мой код

Я создал новый объект следующим образом:

   $request = new CopyFile('123','123','123','123','123');
 

Но все переменные $request неинициализированы. Я могу войти в конструктор CopyFile. И я обнаружил, что конструктор получил значения параметров, а значения передаются в $this .

Класс Thread:

 class CopyFile extends Thread {
public $file;
public $extension;
public $location;
public $type;

public function __construct($file,$extension,$location,$type,$id){
    $this->$file = $file;
    $this->$extension = $extension;
    $this->$location = $location;
    $this->$type = $type;
    $this->$id = $id;       
}

public function run(){

    $key = $this.$location . '/' . $this.$id . '.' . $this.$extension;      

    log::info($result);
}
}
 

Ответ №1:

Ваш конструктор неверен, он должен быть таким, как показано ниже. Чтобы присвоить значение или получить доступ к переменным-членам, вам нужен следующий синтаксис

 $this->var_name = 'some_val' ; // no $ sign before the variable name


public function __construct($file,$extension,$location,$type,$id){
    $this->file = $file;
    $this->extension = $extension;
    $this->location = $location;
    $this->type = $type;
    $this->id = $id;       
}
 

Аналогично

 $key = $this.$location . '/' . $this.$id . '.' . $this.$extension;
 

Должно быть

 $key = $this->location . '/' . $this->id . '.' . $this->extension;
 

Вам также может потребоваться иметь идентификатор переменной что-то вроде

 public $id ; 
 

Комментарии:

1. Большое спасибо, Абхик. Я потратил на это много часов. Вы решили мои проблемы всего за минуту. Мне нужно больше узнать об объектно-ориентированном синтаксисе.

2. Добро пожаловать, и да, ознакомьтесь с руководством по PHP, в нем есть хорошие примеры для начала.