Using add action for class with construct

above code does not works for me, is not correct or any mistake from
my side?

And it didn’t work for me either. Because it throws this fatal error:

PHP Fatal error: No code may exist outside of namespace {} in …

And that’s because the PHP manual says:

No PHP code may exist outside of the namespace brackets except for an
opening declare statement.

So your code could be fixed in two ways:

  1. Use the non-bracketed syntax.

    <?php
    namespace NS;
    
    class MyClass {
         public function __construct() {
              add_action( 'init',array( $this, 'getStuffDone' ) );
         }
         public function getStuffDone() {
              // .. This is where stuff gets done ..
         }
    }
    
    $var = new MyClass();
    
  2. Put global code (or the $var = new MyClass();) inside a namespace statement (namespace {}) with no namespace. Note though, that you need to use NS\MyClass instead of just MyClass.

    <?php
    // No code here. (except `declare`)
    
    namespace NS {
    
        class MyClass {
             public function __construct() {
                  add_action( 'init',array( $this, 'getStuffDone' ) );
             }
             public function getStuffDone() {
                  // .. This is where stuff gets done ..
             }
        }
    }
    // No code here. (except another `namespace {...}`)
    
    namespace {
        $var = new NS\MyClass();
    }
    // No code here. (except another `namespace {...}`)
    

UPDATE

Ok, this is what I have in wp-content/themes/my-theme/includes/MyClass.php:

<?php
namespace NS;

class MyClass {
     public function __construct() {
          add_action( 'init', array( $this, 'getStuffDone' ) );
          add_filter( 'the_content', array( $this, 'test' ) );
     }

     public function getStuffDone() {
          error_log( __METHOD__ . ' was called' );
     }

     public function test( $content ) {
          return __METHOD__ . ' in the_content.<hr>' . $content;
     }
}

$var = new MyClass();

And I’m including the file from wp-content/themes/my-theme/functions.php:

require_once get_template_directory() . '/includes/MyClass.php';

Try that out and see if it works for you, because it worked well for me:

  • You’d see NS\MyClass::test in the_content. in the post content (just visit any single post).

  • You’d see NS\MyClass::getStuffDone was called added in the error_log file or wp-content/debug.log if you enabled WP_DEBUG_LOG.