Difference between $bundle and bundle()krumo()/dpm() not workingEntityMalformedException in custom module. Can anyone see what I did wrong?Difference between a bundle and a content typeWhat is the order of return value for field_info_instances?Fixing bad node that makes search not index, but completes cronHow to add css class to a field from a select list before rendering?Programmatically get field values of fields added to custom entityWhy won't custom field property values save if they are in a fieldset?Custom form to modify only some fields of an EntityForm

Smallest number containing the first 11 primes as sub-strings

Shorten leader-line for labels with geometry-generator

お仕事に学校頑張って meaning

Is population size a parameter, or sample size a statistic?

Why, even after his imprisonment, people keep calling Hannibal Lecter "Doctor"?

Why does my browser attempt to download pages from http://clhs.lisp.se instead of viewing them normally?

Fix Ethernet 10/100 PoE cable with 7 out of 8 wires alive

What makes learning more difficult as we age?

I reverse the source code, you reverse the input!

ZFS inside a virtual machine

Is determiner 'a' needed here?

"I will not" or "I don't" as an answer for negative orders?

String whitespaces

Do interval ratios take overtones into account or solely the fundamental frequency?

Top off gas with old oil, is that bad?

What's the use case of commercial optimizer when we have Tensorflow?

Why would an airline put 15 passengers at once on standby?

Garage door sticks on a bolt

Gave from hunger: Imperfect past tense of "feed"?

What's the hidden joke/meaning behind "Don't drink and park - accidents cause people"?

Reorder a matrix, twice

Why does Captain Marvel in the MCU not have her sash?

Is there a concept of "peer review" in Rabbinical Judaism?

End a command question



Difference between $bundle and bundle()


krumo()/dpm() not workingEntityMalformedException in custom module. Can anyone see what I did wrong?Difference between a bundle and a content typeWhat is the order of return value for field_info_instances?Fixing bad node that makes search not index, but completes cronHow to add css class to a field from a select list before rendering?Programmatically get field values of fields added to custom entityWhy won't custom field property values save if they are in a fieldset?Custom form to modify only some fields of an EntityForm






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








2















Background information: I'm trying to manipulate the available options of a list type text field, depending on the host bundle:



function wtbase_options_list_alter(array &$options, array $context) 
$fieldDefinition = $context['fieldDefinition'];
if ($fieldDefinition->getName() == 'field_aos_cell' && $fieldDefinition->bundle() != 'link')
foreach ($options as $key => $value)
if ($key == 'link-horizontally-opposing')
unset($options[$key]);






The $fieldDefinition->bundle part is really confusing. There seems to be a variable $fieldDefinition->bundle (containing the expected bundle name link) and a function $fieldDefinition->bundle() (containing field_config). But I can't access the variable bundle, because this crashed with Cannot access protected property DrupalfieldEntityFieldConfig::$bundle.



After some digging I found FieldConfigBase::getTargetBundle(), which did return the expected result and did not crash (yet).



So this leads to two questions:



What is the difference between $bundle, bundle() and getTargetBundle() and which one I'm supposed to use? I'd prefer using variables, because they are visible in Xdebug, while functions are not.



And in a more general point of view, are there some guidelines when to use functions and when to use variables? In the same example as above Xdebug printed the same weird results for e.g. entity_type vs entityTypeId vs getEntityType() vs getEntityTypeId().



--



Update, clarification for question 1:



I know the technical difference between a member property and a member function. But I'm deeply confused that a property $bundle and a function bundle() of the exact same name are returning values from a completely different entities/context. In my example $fieldDefinition->bundle returns a Paragraph bundle name link, while $fieldDefinition->bundle() seems to return the bundle name from FieldConfig. I know this is technically possible... but why would anyone write code like this? I've not yet experienced this behavior anywhere else in Drupal core, usually $entity->bundle and $entity->bundle() return the same result.










share|improve this question
































    2















    Background information: I'm trying to manipulate the available options of a list type text field, depending on the host bundle:



    function wtbase_options_list_alter(array &$options, array $context) 
    $fieldDefinition = $context['fieldDefinition'];
    if ($fieldDefinition->getName() == 'field_aos_cell' && $fieldDefinition->bundle() != 'link')
    foreach ($options as $key => $value)
    if ($key == 'link-horizontally-opposing')
    unset($options[$key]);






    The $fieldDefinition->bundle part is really confusing. There seems to be a variable $fieldDefinition->bundle (containing the expected bundle name link) and a function $fieldDefinition->bundle() (containing field_config). But I can't access the variable bundle, because this crashed with Cannot access protected property DrupalfieldEntityFieldConfig::$bundle.



    After some digging I found FieldConfigBase::getTargetBundle(), which did return the expected result and did not crash (yet).



    So this leads to two questions:



    What is the difference between $bundle, bundle() and getTargetBundle() and which one I'm supposed to use? I'd prefer using variables, because they are visible in Xdebug, while functions are not.



    And in a more general point of view, are there some guidelines when to use functions and when to use variables? In the same example as above Xdebug printed the same weird results for e.g. entity_type vs entityTypeId vs getEntityType() vs getEntityTypeId().



    --



    Update, clarification for question 1:



    I know the technical difference between a member property and a member function. But I'm deeply confused that a property $bundle and a function bundle() of the exact same name are returning values from a completely different entities/context. In my example $fieldDefinition->bundle returns a Paragraph bundle name link, while $fieldDefinition->bundle() seems to return the bundle name from FieldConfig. I know this is technically possible... but why would anyone write code like this? I've not yet experienced this behavior anywhere else in Drupal core, usually $entity->bundle and $entity->bundle() return the same result.










    share|improve this question




























      2












      2








      2








      Background information: I'm trying to manipulate the available options of a list type text field, depending on the host bundle:



      function wtbase_options_list_alter(array &$options, array $context) 
      $fieldDefinition = $context['fieldDefinition'];
      if ($fieldDefinition->getName() == 'field_aos_cell' && $fieldDefinition->bundle() != 'link')
      foreach ($options as $key => $value)
      if ($key == 'link-horizontally-opposing')
      unset($options[$key]);






      The $fieldDefinition->bundle part is really confusing. There seems to be a variable $fieldDefinition->bundle (containing the expected bundle name link) and a function $fieldDefinition->bundle() (containing field_config). But I can't access the variable bundle, because this crashed with Cannot access protected property DrupalfieldEntityFieldConfig::$bundle.



      After some digging I found FieldConfigBase::getTargetBundle(), which did return the expected result and did not crash (yet).



      So this leads to two questions:



      What is the difference between $bundle, bundle() and getTargetBundle() and which one I'm supposed to use? I'd prefer using variables, because they are visible in Xdebug, while functions are not.



      And in a more general point of view, are there some guidelines when to use functions and when to use variables? In the same example as above Xdebug printed the same weird results for e.g. entity_type vs entityTypeId vs getEntityType() vs getEntityTypeId().



      --



      Update, clarification for question 1:



      I know the technical difference between a member property and a member function. But I'm deeply confused that a property $bundle and a function bundle() of the exact same name are returning values from a completely different entities/context. In my example $fieldDefinition->bundle returns a Paragraph bundle name link, while $fieldDefinition->bundle() seems to return the bundle name from FieldConfig. I know this is technically possible... but why would anyone write code like this? I've not yet experienced this behavior anywhere else in Drupal core, usually $entity->bundle and $entity->bundle() return the same result.










      share|improve this question
















      Background information: I'm trying to manipulate the available options of a list type text field, depending on the host bundle:



      function wtbase_options_list_alter(array &$options, array $context) 
      $fieldDefinition = $context['fieldDefinition'];
      if ($fieldDefinition->getName() == 'field_aos_cell' && $fieldDefinition->bundle() != 'link')
      foreach ($options as $key => $value)
      if ($key == 'link-horizontally-opposing')
      unset($options[$key]);






      The $fieldDefinition->bundle part is really confusing. There seems to be a variable $fieldDefinition->bundle (containing the expected bundle name link) and a function $fieldDefinition->bundle() (containing field_config). But I can't access the variable bundle, because this crashed with Cannot access protected property DrupalfieldEntityFieldConfig::$bundle.



      After some digging I found FieldConfigBase::getTargetBundle(), which did return the expected result and did not crash (yet).



      So this leads to two questions:



      What is the difference between $bundle, bundle() and getTargetBundle() and which one I'm supposed to use? I'd prefer using variables, because they are visible in Xdebug, while functions are not.



      And in a more general point of view, are there some guidelines when to use functions and when to use variables? In the same example as above Xdebug printed the same weird results for e.g. entity_type vs entityTypeId vs getEntityType() vs getEntityTypeId().



      --



      Update, clarification for question 1:



      I know the technical difference between a member property and a member function. But I'm deeply confused that a property $bundle and a function bundle() of the exact same name are returning values from a completely different entities/context. In my example $fieldDefinition->bundle returns a Paragraph bundle name link, while $fieldDefinition->bundle() seems to return the bundle name from FieldConfig. I know this is technically possible... but why would anyone write code like this? I've not yet experienced this behavior anywhere else in Drupal core, usually $entity->bundle and $entity->bundle() return the same result.







      entities debugging






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 8 hours ago







      Hudri

















      asked 8 hours ago









      HudriHudri

      2,5471 gold badge7 silver badges25 bronze badges




      2,5471 gold badge7 silver badges25 bronze badges























          1 Answer
          1






          active

          oldest

          votes


















          3
















          bundle is the property on the object. It's where the value is stored. Properties can be assigned one of three ways:




          • public: these properties can be directly set or read on the object. Example:



            $object->key = 'value';
            $value = $object->key;



          • private: These can only be accessed by methods (functions) of the class itself. Nothing else can access it. For example, this will throw an error:



            $value = $object->key;


            Whereas this would be allowed:



            class Example 
            private $key;

            function getPrivateValue()
            return $this->key;



            $value = $object->getPrivateValue();


            $key cannot be accessed outside of the class, since it is private. This can be used to enforce rules on the types of data to be stored in the property. Checks can be run to ensure it's an allowed data type.



          • protected: These are like private properties, however if a class extends the class, the extended class can access the property. If the property is private, extended classes cannot access it.


          One thing for you to understand is that $node->bundle and $node->bundle() are not the same things. The first is a property, the other is a method. This should help understand, as a (non-real) example:



          class Node 
          protected $bundle;

          public function bundle()
          return $this->bundle;




          The above class has the property $bundle, and the method (function) bundle(). The method returns the value stored in the property.



          Look at the error you are seeing: Cannot access protected property DrupalfieldEntityFieldConfig::$bundle. This is because you are trying to access the $bundle property, but it is protected, meaning you cannot access it from outside the class.



          To get the bundle of a node, you need to call the bundle() method on it, which will give you the bundle type. This is the answer to your question about which to use.




          And in a more general point of view, are there some guidelines when to use functions and when to use variables?




          It's generally thought to be a best practice to not provide direct access to properties on objects, and instead create setter and getter methods (functions) on objects to set and retrieve the property values. That way you can say, enforce a pattern:



          class Example 

          protected $username

          public function setUsername($username)
          if (!is_string($username))
          throw new Exception('Username must be a string');

          elseif (!preg_match('/^[a-zA-Z0-9_-]3,12$/', $username))
          throw new Exception('Username must be between 3 and 12 characters, and may contain only alphanumerics, underscores or hyphens');


          $this->username = $username;


          public function getUsername()
          return $this->username;




          The above enforces that username is both a string, and is the right length and only contains allowed characters.



          Edit: Additional comment from Leigh:



          another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned






          share|improve this answer






















          • 1





            Also just to add to this, another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned

            – Leigh
            8 hours ago











          • Good point. I'll add it to my post.

            – Jaypan
            8 hours ago











          • I got the basic, technical difference between a member property and a member function... but why would anyone write code that returns semantically different things for those two? In my example above link is from Paragraphs, while field_config is from FieldConfig.

            – Hudri
            8 hours ago












          • bundle() will return a string containing the bundle name. Your original post doesn't really make sense in that regard. If it is returning anything other than a string containing the bundle name, you've either misdiagnosed the issue, or you've got a broken system, and some module/theme is doing wonky stuff breaking core functionality.

            – Jaypan
            8 hours ago











          • I believe they're provided by different classes, getTargetBundle() from the Field class and bundle() from the Entity class. You see both because the fields/configs are effectively entities. Which I'd say is why you see overlapping functions/data

            – Leigh
            8 hours ago













          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "220"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );














          draft saved

          draft discarded
















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdrupal.stackexchange.com%2fquestions%2f286641%2fdifference-between-bundle-and-bundle%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          3
















          bundle is the property on the object. It's where the value is stored. Properties can be assigned one of three ways:




          • public: these properties can be directly set or read on the object. Example:



            $object->key = 'value';
            $value = $object->key;



          • private: These can only be accessed by methods (functions) of the class itself. Nothing else can access it. For example, this will throw an error:



            $value = $object->key;


            Whereas this would be allowed:



            class Example 
            private $key;

            function getPrivateValue()
            return $this->key;



            $value = $object->getPrivateValue();


            $key cannot be accessed outside of the class, since it is private. This can be used to enforce rules on the types of data to be stored in the property. Checks can be run to ensure it's an allowed data type.



          • protected: These are like private properties, however if a class extends the class, the extended class can access the property. If the property is private, extended classes cannot access it.


          One thing for you to understand is that $node->bundle and $node->bundle() are not the same things. The first is a property, the other is a method. This should help understand, as a (non-real) example:



          class Node 
          protected $bundle;

          public function bundle()
          return $this->bundle;




          The above class has the property $bundle, and the method (function) bundle(). The method returns the value stored in the property.



          Look at the error you are seeing: Cannot access protected property DrupalfieldEntityFieldConfig::$bundle. This is because you are trying to access the $bundle property, but it is protected, meaning you cannot access it from outside the class.



          To get the bundle of a node, you need to call the bundle() method on it, which will give you the bundle type. This is the answer to your question about which to use.




          And in a more general point of view, are there some guidelines when to use functions and when to use variables?




          It's generally thought to be a best practice to not provide direct access to properties on objects, and instead create setter and getter methods (functions) on objects to set and retrieve the property values. That way you can say, enforce a pattern:



          class Example 

          protected $username

          public function setUsername($username)
          if (!is_string($username))
          throw new Exception('Username must be a string');

          elseif (!preg_match('/^[a-zA-Z0-9_-]3,12$/', $username))
          throw new Exception('Username must be between 3 and 12 characters, and may contain only alphanumerics, underscores or hyphens');


          $this->username = $username;


          public function getUsername()
          return $this->username;




          The above enforces that username is both a string, and is the right length and only contains allowed characters.



          Edit: Additional comment from Leigh:



          another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned






          share|improve this answer






















          • 1





            Also just to add to this, another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned

            – Leigh
            8 hours ago











          • Good point. I'll add it to my post.

            – Jaypan
            8 hours ago











          • I got the basic, technical difference between a member property and a member function... but why would anyone write code that returns semantically different things for those two? In my example above link is from Paragraphs, while field_config is from FieldConfig.

            – Hudri
            8 hours ago












          • bundle() will return a string containing the bundle name. Your original post doesn't really make sense in that regard. If it is returning anything other than a string containing the bundle name, you've either misdiagnosed the issue, or you've got a broken system, and some module/theme is doing wonky stuff breaking core functionality.

            – Jaypan
            8 hours ago











          • I believe they're provided by different classes, getTargetBundle() from the Field class and bundle() from the Entity class. You see both because the fields/configs are effectively entities. Which I'd say is why you see overlapping functions/data

            – Leigh
            8 hours ago















          3
















          bundle is the property on the object. It's where the value is stored. Properties can be assigned one of three ways:




          • public: these properties can be directly set or read on the object. Example:



            $object->key = 'value';
            $value = $object->key;



          • private: These can only be accessed by methods (functions) of the class itself. Nothing else can access it. For example, this will throw an error:



            $value = $object->key;


            Whereas this would be allowed:



            class Example 
            private $key;

            function getPrivateValue()
            return $this->key;



            $value = $object->getPrivateValue();


            $key cannot be accessed outside of the class, since it is private. This can be used to enforce rules on the types of data to be stored in the property. Checks can be run to ensure it's an allowed data type.



          • protected: These are like private properties, however if a class extends the class, the extended class can access the property. If the property is private, extended classes cannot access it.


          One thing for you to understand is that $node->bundle and $node->bundle() are not the same things. The first is a property, the other is a method. This should help understand, as a (non-real) example:



          class Node 
          protected $bundle;

          public function bundle()
          return $this->bundle;




          The above class has the property $bundle, and the method (function) bundle(). The method returns the value stored in the property.



          Look at the error you are seeing: Cannot access protected property DrupalfieldEntityFieldConfig::$bundle. This is because you are trying to access the $bundle property, but it is protected, meaning you cannot access it from outside the class.



          To get the bundle of a node, you need to call the bundle() method on it, which will give you the bundle type. This is the answer to your question about which to use.




          And in a more general point of view, are there some guidelines when to use functions and when to use variables?




          It's generally thought to be a best practice to not provide direct access to properties on objects, and instead create setter and getter methods (functions) on objects to set and retrieve the property values. That way you can say, enforce a pattern:



          class Example 

          protected $username

          public function setUsername($username)
          if (!is_string($username))
          throw new Exception('Username must be a string');

          elseif (!preg_match('/^[a-zA-Z0-9_-]3,12$/', $username))
          throw new Exception('Username must be between 3 and 12 characters, and may contain only alphanumerics, underscores or hyphens');


          $this->username = $username;


          public function getUsername()
          return $this->username;




          The above enforces that username is both a string, and is the right length and only contains allowed characters.



          Edit: Additional comment from Leigh:



          another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned






          share|improve this answer






















          • 1





            Also just to add to this, another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned

            – Leigh
            8 hours ago











          • Good point. I'll add it to my post.

            – Jaypan
            8 hours ago











          • I got the basic, technical difference between a member property and a member function... but why would anyone write code that returns semantically different things for those two? In my example above link is from Paragraphs, while field_config is from FieldConfig.

            – Hudri
            8 hours ago












          • bundle() will return a string containing the bundle name. Your original post doesn't really make sense in that regard. If it is returning anything other than a string containing the bundle name, you've either misdiagnosed the issue, or you've got a broken system, and some module/theme is doing wonky stuff breaking core functionality.

            – Jaypan
            8 hours ago











          • I believe they're provided by different classes, getTargetBundle() from the Field class and bundle() from the Entity class. You see both because the fields/configs are effectively entities. Which I'd say is why you see overlapping functions/data

            – Leigh
            8 hours ago













          3














          3










          3









          bundle is the property on the object. It's where the value is stored. Properties can be assigned one of three ways:




          • public: these properties can be directly set or read on the object. Example:



            $object->key = 'value';
            $value = $object->key;



          • private: These can only be accessed by methods (functions) of the class itself. Nothing else can access it. For example, this will throw an error:



            $value = $object->key;


            Whereas this would be allowed:



            class Example 
            private $key;

            function getPrivateValue()
            return $this->key;



            $value = $object->getPrivateValue();


            $key cannot be accessed outside of the class, since it is private. This can be used to enforce rules on the types of data to be stored in the property. Checks can be run to ensure it's an allowed data type.



          • protected: These are like private properties, however if a class extends the class, the extended class can access the property. If the property is private, extended classes cannot access it.


          One thing for you to understand is that $node->bundle and $node->bundle() are not the same things. The first is a property, the other is a method. This should help understand, as a (non-real) example:



          class Node 
          protected $bundle;

          public function bundle()
          return $this->bundle;




          The above class has the property $bundle, and the method (function) bundle(). The method returns the value stored in the property.



          Look at the error you are seeing: Cannot access protected property DrupalfieldEntityFieldConfig::$bundle. This is because you are trying to access the $bundle property, but it is protected, meaning you cannot access it from outside the class.



          To get the bundle of a node, you need to call the bundle() method on it, which will give you the bundle type. This is the answer to your question about which to use.




          And in a more general point of view, are there some guidelines when to use functions and when to use variables?




          It's generally thought to be a best practice to not provide direct access to properties on objects, and instead create setter and getter methods (functions) on objects to set and retrieve the property values. That way you can say, enforce a pattern:



          class Example 

          protected $username

          public function setUsername($username)
          if (!is_string($username))
          throw new Exception('Username must be a string');

          elseif (!preg_match('/^[a-zA-Z0-9_-]3,12$/', $username))
          throw new Exception('Username must be between 3 and 12 characters, and may contain only alphanumerics, underscores or hyphens');


          $this->username = $username;


          public function getUsername()
          return $this->username;




          The above enforces that username is both a string, and is the right length and only contains allowed characters.



          Edit: Additional comment from Leigh:



          another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned






          share|improve this answer















          bundle is the property on the object. It's where the value is stored. Properties can be assigned one of three ways:




          • public: these properties can be directly set or read on the object. Example:



            $object->key = 'value';
            $value = $object->key;



          • private: These can only be accessed by methods (functions) of the class itself. Nothing else can access it. For example, this will throw an error:



            $value = $object->key;


            Whereas this would be allowed:



            class Example 
            private $key;

            function getPrivateValue()
            return $this->key;



            $value = $object->getPrivateValue();


            $key cannot be accessed outside of the class, since it is private. This can be used to enforce rules on the types of data to be stored in the property. Checks can be run to ensure it's an allowed data type.



          • protected: These are like private properties, however if a class extends the class, the extended class can access the property. If the property is private, extended classes cannot access it.


          One thing for you to understand is that $node->bundle and $node->bundle() are not the same things. The first is a property, the other is a method. This should help understand, as a (non-real) example:



          class Node 
          protected $bundle;

          public function bundle()
          return $this->bundle;




          The above class has the property $bundle, and the method (function) bundle(). The method returns the value stored in the property.



          Look at the error you are seeing: Cannot access protected property DrupalfieldEntityFieldConfig::$bundle. This is because you are trying to access the $bundle property, but it is protected, meaning you cannot access it from outside the class.



          To get the bundle of a node, you need to call the bundle() method on it, which will give you the bundle type. This is the answer to your question about which to use.




          And in a more general point of view, are there some guidelines when to use functions and when to use variables?




          It's generally thought to be a best practice to not provide direct access to properties on objects, and instead create setter and getter methods (functions) on objects to set and retrieve the property values. That way you can say, enforce a pattern:



          class Example 

          protected $username

          public function setUsername($username)
          if (!is_string($username))
          throw new Exception('Username must be a string');

          elseif (!preg_match('/^[a-zA-Z0-9_-]3,12$/', $username))
          throw new Exception('Username must be between 3 and 12 characters, and may contain only alphanumerics, underscores or hyphens');


          $this->username = $username;


          public function getUsername()
          return $this->username;




          The above enforces that username is both a string, and is the right length and only contains allowed characters.



          Edit: Additional comment from Leigh:



          another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 8 hours ago

























          answered 8 hours ago









          JaypanJaypan

          8,9071 gold badge11 silver badges35 bronze badges




          8,9071 gold badge11 silver badges35 bronze badges










          • 1





            Also just to add to this, another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned

            – Leigh
            8 hours ago











          • Good point. I'll add it to my post.

            – Jaypan
            8 hours ago











          • I got the basic, technical difference between a member property and a member function... but why would anyone write code that returns semantically different things for those two? In my example above link is from Paragraphs, while field_config is from FieldConfig.

            – Hudri
            8 hours ago












          • bundle() will return a string containing the bundle name. Your original post doesn't really make sense in that regard. If it is returning anything other than a string containing the bundle name, you've either misdiagnosed the issue, or you've got a broken system, and some module/theme is doing wonky stuff breaking core functionality.

            – Jaypan
            8 hours ago











          • I believe they're provided by different classes, getTargetBundle() from the Field class and bundle() from the Entity class. You see both because the fields/configs are effectively entities. Which I'd say is why you see overlapping functions/data

            – Leigh
            8 hours ago












          • 1





            Also just to add to this, another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned

            – Leigh
            8 hours ago











          • Good point. I'll add it to my post.

            – Jaypan
            8 hours ago











          • I got the basic, technical difference between a member property and a member function... but why would anyone write code that returns semantically different things for those two? In my example above link is from Paragraphs, while field_config is from FieldConfig.

            – Hudri
            8 hours ago












          • bundle() will return a string containing the bundle name. Your original post doesn't really make sense in that regard. If it is returning anything other than a string containing the bundle name, you've either misdiagnosed the issue, or you've got a broken system, and some module/theme is doing wonky stuff breaking core functionality.

            – Jaypan
            8 hours ago











          • I believe they're provided by different classes, getTargetBundle() from the Field class and bundle() from the Entity class. You see both because the fields/configs are effectively entities. Which I'd say is why you see overlapping functions/data

            – Leigh
            8 hours ago







          1




          1





          Also just to add to this, another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned

          – Leigh
          8 hours ago





          Also just to add to this, another reason to avoid accessing the property directly is when you have multiple values. e.g. if you have a field "my_field" on a node which has multiple values if you use $node->my_field->value you'll only get 1 value returned

          – Leigh
          8 hours ago













          Good point. I'll add it to my post.

          – Jaypan
          8 hours ago





          Good point. I'll add it to my post.

          – Jaypan
          8 hours ago













          I got the basic, technical difference between a member property and a member function... but why would anyone write code that returns semantically different things for those two? In my example above link is from Paragraphs, while field_config is from FieldConfig.

          – Hudri
          8 hours ago






          I got the basic, technical difference between a member property and a member function... but why would anyone write code that returns semantically different things for those two? In my example above link is from Paragraphs, while field_config is from FieldConfig.

          – Hudri
          8 hours ago














          bundle() will return a string containing the bundle name. Your original post doesn't really make sense in that regard. If it is returning anything other than a string containing the bundle name, you've either misdiagnosed the issue, or you've got a broken system, and some module/theme is doing wonky stuff breaking core functionality.

          – Jaypan
          8 hours ago





          bundle() will return a string containing the bundle name. Your original post doesn't really make sense in that regard. If it is returning anything other than a string containing the bundle name, you've either misdiagnosed the issue, or you've got a broken system, and some module/theme is doing wonky stuff breaking core functionality.

          – Jaypan
          8 hours ago













          I believe they're provided by different classes, getTargetBundle() from the Field class and bundle() from the Entity class. You see both because the fields/configs are effectively entities. Which I'd say is why you see overlapping functions/data

          – Leigh
          8 hours ago





          I believe they're provided by different classes, getTargetBundle() from the Field class and bundle() from the Entity class. You see both because the fields/configs are effectively entities. Which I'd say is why you see overlapping functions/data

          – Leigh
          8 hours ago


















          draft saved

          draft discarded















































          Thanks for contributing an answer to Drupal Answers!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdrupal.stackexchange.com%2fquestions%2f286641%2fdifference-between-bundle-and-bundle%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          ParseJSON using SSJSUsing AMPscript with SSJS ActivitiesHow to resubscribe a user in Marketing cloud using SSJS?Pulling Subscriber Status from Lists using SSJSRetrieving Emails using SSJSProblem in updating DE using SSJSUsing SSJS to send single email in Marketing CloudError adding EmailSendDefinition using SSJS

          Кампала Садржај Географија Географија Историја Становништво Привреда Партнерски градови Референце Спољашње везе Мени за навигацију0°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.340°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.34МедијиПодациЗванични веб-сајту

          19. јануар Садржај Догађаји Рођења Смрти Празници и дани сећања Види још Референце Мени за навигацијуу