-
Notifications
You must be signed in to change notification settings - Fork 15.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PHP C extension protobuf message class introspection not possible #4761
Comments
We haven't supported assertEquals for message. For now, your test should not depend on that. |
Hey @TeBoring, thank you for your quick response! |
In c extension, |
Hi @TeBoring, while I agree that |
In my opinion the main issue is that the C Extension is behaving different than the PHP package.
I would prefer the second approach since it would be a way more natural behaviour and increase the usability. |
I'm hitting this issue also. For now, I'm using |
@tobiasgies, what's your use case for casting the object to an array? |
@mcos, |
It mightn't be fully supported, but |
Oh yes. The unit tests in |
It's welcome to have a PR for this issue. |
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Moved GPBMetadata to metadata directory
It is possible in PHP to convert an object to an array using a simple array cast. Check out the documentation on PHP arrays under "Converting to array". I found the following example also from this helpful stack overflow article: class Foo
{
private $foo;
protected $bar;
public $baz;
public function __construct()
{
$this->foo = 1;
$this->bar = 2;
$this->baz = new StdClass;
}
}
var_export((array) new Foo); This will output:
|
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase
* Add isRacy() to SafeSearch (#1166) The SafeSearch class included `is` functions for each SafeSearch feature (adult, spoof, medical, violence), but was missing Racy. This Pull Request adds `isRacy()` to the SafeSearch class. * Exclude component vendor folder from snippet coverage (#1168) cc @tmatsuo * Allow context to handle Throwable interface (#1164) * Add getServiceAccount to the BigQueryClient (#1167) * Add getServiceAccount to the BigQueryClient See: https://cloud.google.com/bigquery/docs/reference/rest/v2/projects/getServiceAccount * Added $options to getServiceAccount and fixed the indent * Use single quote * Add snippet test * Comment update, use self instead of $this * Comment update * Prepare v0.71.0 (#1169) * Prepare v0.71.0 * patch release for Logging * Correct version for Logging * [Kms] Regenerate with the new gapic config (#1165) * Update for the new gapic configuration * Docs update for the new and nicer namespace * Removed the files with the old namespace * Use the new namespace in the code sample Add back the deprecated files * Changed the wording for the deprecation warning * Fix firestore queries (#1161) * Bump gax to 0.35 (#1170) * Add an interactive release builder. (#1160) * Add an interactive release builder. * Create build directory if it doesn't exist * Add getServiceAccount method to StorageClient (#1173) * Re-generate library using Tasks/synth.py (#1174) * Re-generate library using Tasks/synth.py * Use new namespace in user visible area, tweak the deprecation wording * Add support for Numeric type (#1172) * Add support for Numeric type * Added a cast in Numeric's constructor, added system tests * Allow '123.' and '.123', update tests * [Breaking Change] Add support for Document Snapshots in Firestore Query Cursors (#1162) cc @schmidt-sebastian Extracted from #923 and updated to address pull request comments. Breaking change is the standardization in Query of using `InvalidArgumentException`, replacing various throws of `BadMethodCallException`. Closes #851. * Fix Storage Requesterpays system tests (#1180) The requester pays system tests have been broken for some time. This change fixes them. * Bandaid for protobuf 4761 (#1176) * Temporary workaround for protobuf extension issue protocolbuffers/protobuf#4761 * Bump gax to 0.36 * Configure comparators for the unit test * Revert back to normal TestCase * Install protobuf extension in the PHP 7.2 test runner * Revert to TestCase * Prepare v0.72.0 (#1181) * Added a document for the time filter on BigQueryClient->jobs() (#1183) * Narrowed the time filter in the system test (#1185) * Re-generate library using BigQueryDataTransfer/synth.py (#1184) * Re-generate library using BigQueryDataTransfer/synth.py * Tweak the wording on the deprecation warning Also use the new namespace in the sample code * pin auth version until we have a way to silence warnings (#1189)
I am working on a fix: #4946 |
This issue is very old and covers many different problems. Going to close but please open a specific bug about a feature if you still need it. |
Issue
When var_dumping, json_encoding or array casting a generated protobuf message class, an
E_USER_ERROR
"Cannot access private properties."
is triggered in the protobuf C extension.This behaviour is different from PHPs native behaviour and thus diffierent to the behaviour of the protobuf PHP library.
I found this issue after updating the protobuf extension because the comparison of two protobuf message classes with PHPUnit's
assertEquals
function was failing.Expected behaviour
It should follow the PHP native behaviour, that means:
The error should only be triggered if there is a real direct private property access (
$instance->property
).When json_encoding it should return an empty object.
{}
When var_dumping it should show the private properties and its values.
Example:
When array casting, it should return an array with the keys and values.
Example:
Additional information
The
E_USER_ERROR
was introduced with v3.6.0rc1. Curiously, code that would implement the expected behavior was also added in that commit, it is just unreachable because of thezend_error
call.The text was updated successfully, but these errors were encountered: