¿Cómo puedo acceder al "este" de un controller angular js, desde dentro de un método de promise?

Tengo un controller angular js simple que hace una request XHR como se muestra a continuación

app.controller('MainController', ['$http', function($http) { this.php_response = {}; var promise = $http.get('process.php'); promise.then( function(success_data) { // I dont think "this" is talking to the controller this anymore? this.php_response = success_data; }, function(error) { console.log('there was a problem'); } ); }]); 

Cuando escribí este controller usando $scope lugar de esto, el código funcionó, ahora la propiedad this.php_response no contiene los datos recuperados de la request de XHR.
Sospecho que la callback promise.then#success ya no hace reference al controller.
¿Cómo puedo acceder al esto, dentro del método de la promise?

Utilice la function de flecha que preserve el context léxico:

 promise.then(success_data => { this.php_response = success_data; }, error => { console.log('there was a problem'); }); 

Otra forma simple es vincular el context con el método Function.prototype.bind :

 promise.then(function(success_data) { this.php_response = success_data; }.bind(this), function(error) { console.log('there was a problem'); }); 

Y, por último, de la vieja escuela: defina una variable de reference que apunte a this externo y úselo dentro de la callback:

 var self = this; promise.then(function(success_data) { self.php_response = success_data; }, function (error) { console.log('there was a problem'); }); 

Lo que sea que prefieras más.

También puede usar angular.bind para este caso

 promise.then(angular.bind(this, function (success_data) { this.php_response = success_data; }), function (error) { console.log('there was a problem'); });