GithubHelp home page GithubHelp logo

property, variable and PhpValue about peachpie HOT 4 OPEN

N0zzy avatar N0zzy commented on May 27, 2024
property, variable and PhpValue

from peachpie.

Comments (4)

jakubmisek avatar jakubmisek commented on May 27, 2024

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.

N0zzy avatar N0zzy commented on May 27, 2024

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).
jWphPzgiJJ4

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.
244928353-05194dd3-c9b5-48d0-b93b-d2052e55b10d

as a result I receive php-property - dynamic.
i0I-5qka1d8

and a php-variable is strict.
image

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 ...

image

from peachpie.

jakubmisek avatar jakubmisek commented on May 27, 2024

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.

N0zzy avatar N0zzy commented on May 27, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.