mgdm / Mosquitto-PHP

A wrapper for the Eclipse Mosquitto™ MQTT client library for PHP.
BSD 3-Clause "New" or "Revised" License
528 stars 146 forks source link

Unable to assign class properties when extending Mosquitto\Client with php 7.4 #126

Open blacktek opened 2 years ago

blacktek commented 2 years ago

Hello, I'm porting an application from a raspberry pi3 b+ (using php 5.6) to raspberry pi4 (using php 7.4)

The same class I wrote in the past that extends Mosquitto\Client is not working anymore.

My system is configured like this:

$ php --ri mosquitto

mosquitto

Mosquitto support => enabled Compiled as dynamic module libmosquitto version => 2.0.11 Extension version => 0.4.0

$ php -v PHP 7.4.25 (cli) (built: Oct 23 2021 21:53:50) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies

$ uname -a Linux myserver 5.10.63-v7l+ #1488 SMP Thu Nov 18 16:15:28 GMT 2021 armv7l GNU/Linux

$ dpkg -l | grep mosquitto ii libmosquitto-dev:armhf 2.0.11-1 armhf MQTT version 5.0/3.1.1/3.1 client library, development files ii libmosquitto1:armhf 2.0.11-1 armhf MQTT version 5.0/3.1.1/3.1 client library ii mosquitto 2.0.11-1 armhf MQTT version 5.0/3.1.1/3.1 compatible message broker

This is a part of my class:

class MqttClient extends Mosquitto\Client {

protected $connected = false;

public function __construct($id = null, $cleanSession = true) {

    $this->x = 4; // implicit declaration of a property

    var_dump($this);

   var_dump($this->connected);
}

}

When I istantiate an object of the class MqttClient I get:

$ php mqtt_test.php object(MqttClient)#3 (1) { ["x"]=> int(4) } PHP Notice: Undefined property: MqttClient::$connected in /var/www/library/MqttClient.class.php on line 35

Notice: Undefined property: MqttClient::$connected in /var/www/library/MqttClient.class.php on line 35 NULL

Bassically I'm unable to access the properties of my class. If I remove "extends Mosquitto\Client" it works; the same if I try to extend any other class.

I think there is something broken with the extension; I tried to uninstall and reinstall again the package (first install was with pecl install Mosquitto-alpha - the second, after uninstall, was with pecl install Mosquitto-beta). But no change.

Of course nothing changes if I use public instead of protected properties.

If inside the constructor I put

$z1 = new ReflectionClass($this); print_r($z1->getProperties());

I can see the properties:

Array ( [0] => ReflectionProperty Object ( [name] => connected [class] => MqttClient )

) $

Do you have any idea? I think there is something not working with the extension. The exact same code was working with php5.6 on pi3

Thank you!