Comments (4)
The compiler uses PhpValue
instead of the exact type because in PHP it's possible to make a reference to any class property. Making a reference "changes" the type to a special PHP alias (in PeachPie it is called PhpAlias
), hence we can't use MyObject
type for that.
from peachpie.
Thanks for the answer. I apologize for my english. Perhaps I am explaining the problem incorrectly or distorting the essence of the problem. I will try to graphically depict the problem, which, in my PERSONAL VIEW, is a semantic error.
I have created a library (C Sharp).
I'm calling the native C Sharp code. The php-property is of a strict type, and the php-variable is of a dynamic type.
as a result I receive php-property - dynamic.
question. how to make class property - strict? I see that there is an illogical compilation result here. Let's say I'm wrong and don't understand how your compiler works.
I will explain. if a class property becomes dynamic, then such a property for passing data and using it in the c-sharp environment becomes almost impossible. Help solve this problem.
PS I quote you: " because in PHP it's possible to make a reference to any class property ".
even in the original php there is no such thing, but your sematics is not the same ...
from peachpie.
Please see my original answer.
In .NET we can't use the strict type, because we wouldn't be able to store PHP references in there.
class X {
public B $b;
}
$x = new X;
$a =& $x->b; // because of this, we need to treat X.b as `PhpValue`, not `B`. We couldn't create a counted reference to X.b otherwise.
// both $x->b and $a are instance of `Pchp.Core.PhpAlias` now
$a = new B;
This is alright for local variable tho, because the compiler performs data flow analysis and it knows, the variable won't be aliased; therefore it can use the strict type.
(just an idea) We may, however, override this behavior using some additional PHPDoc annotation, so the user can "force" strict typing on a property. Making a reference to such a property would cause a runtime exception though.
from peachpie.
Do you want to add something similar in the future?
/**
* @type-strict
*/
or/and
#[TypeStrict]
I think if you add this in future updates, then the responsibility for using such strict modes (as in the original php) will be the responsibility of the developer himself. I like your work, but I would like to have more flexible control over types and data when writing programs.
this example is very inconvenient to use and in some situations is simply not possible.
class X {
public B $b;
}
$x = new X;
$a =& $x->b; // because of this, we need to treat X.b as `PhpValue`, not `B`. We couldn't create a counted reference to X.b otherwise.
// both $x->b and $a are instance of `Pchp.Core.PhpAlias` now
$a = new B;
from peachpie.
Related Issues (20)
- Compiler Crash: MoveToImmutable can only be performed when Count equals Capacity HOT 1
- Peachpie.Library.PDO.MySQL convert MySQL `tinyint` value to `int` error. HOT 1
- Moving to the new .NET Foundation CLA service HOT 1
- Help with solving the problem with the magic __get and __set HOT 2
- ioncube loader HOT 1
- Magic methods not working as expected HOT 4
- PeachPie 1.0.* Status HOT 1
- Peachpie crypt behavior HOT 1
- some syntax error HOT 4
- strange compiler behavior when modifier is "protected" HOT 1
- program execution time HOT 3
- virtual and override HOT 1
- Strange behavior when instantiating a class in an anonymous function HOT 4
- Problems when compiling a project using Avalonia UI. Help is needed HOT 5
- can not work woth tinyfilemanager
- Home Page Show Not Found HOT 1
- Change Sdk version to 1.1.5 make error when running HOT 3
- when php google/protobuf is used, generated binary php file cause exception after compiled to dll
- Directly render Blazor component on PHP page (ASP.NET Core 8) HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from peachpie.