If you attempt to convert the special $this variable from an instance method (only in classes) :* PHP will silently return TRUE and leave $this unchanged if the type was 'bool', 'array', 'object' or 'NULL'* PHP will generate an E_NOTICE if the type was 'int', 'float' or 'double', and $this will not be casted* PHP will throw a catchable fatal error when the type is 'string' and the class does not define the __toString() methodUnless the new variable type passed as the second argument is invalid, settype() will return TRUE. In all cases the object will remain unchanged.<?php class Foo { function test() { printf("%-20s %-20s %s\n", 'Type', 'Succeed?', 'Converted'); printf("%-20s %-20s %s\n", 'bool', settype($this, 'bool'), print_r($this, TRUE)); printf("%-20s %-20s %s\n", 'int', settype($this, 'int'), print_r($this, TRUE)); printf("%-20s %-20s %s\n", 'float', settype($this, 'float'), print_r($this)); printf("%-20s %-20s %s\n", 'array', settype($this, 'array'), print_r($this, TRUE)); printf("%-20s %-20s %s\n", 'object', settype($this, 'object'), print_r($this, TRUE)); printf("%-20s %-20s %s\n", 'unknowntype', settype($this, 'unknowntype'), print_r($this, TRUE)); printf("%-20s %-20s %s\n", 'NULL', settype($this, 'NULL'), print_r($this, TRUE)); printf("%-20s %-20s %s\n", 'string', settype($this, 'string'), print_r($this, TRUE)); } } $a = new Foo(); $a->test();?>Here is the result :Type Succeed? Convertedbool 1 Foo Object()Notice: Object of class Foo could not be converted to int in C:\php\examples\oop-settype-this.php on line 9int 1 Foo Object()Notice: Object of class Foo could not be converted to float in C:\php\examples\oop-settype-this.php on line 10float 1 Foo Object()array 1 Foo Object()object 1 Foo Object()Warning: settype(): Invalid type in C:\php\examples\oop-settype-this.php on line 14unknowntype Foo Object()NULL 1 Foo Object()Catchable fatal error: Object of class Foo could not be converted to string in C:\php\examples\oop-settype-this.php on line 15If the class Foo implements __toString() :<?php class Foo { function __toString() { return 'Foo object is awesome!'; } }?>So the first code snippet will not generate an E_RECOVERABLE_ERROR, but instead print the same string as for the other types, and not look at the one returned by the __toString() method.Hope this helps ! :)