[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 package UNIVERSAL; 2 3 our $VERSION = '1.04'; 4 5 # UNIVERSAL should not contain any extra subs/methods beyond those 6 # that it exists to define. The use of Exporter below is a historical 7 # accident that can't be fixed without breaking code. Note that we 8 # *don't* set @ISA here, as we don't want all classes/objects inheriting from 9 # Exporter. It's bad enough that all classes have a import() method 10 # whenever UNIVERSAL.pm is loaded. 11 require Exporter; 12 @EXPORT_OK = qw(isa can VERSION); 13 14 # Make sure that even though the import method is called, it doesn't do 15 # anything unless called on UNIVERSAL. 16 sub import { 17 return unless $_[0] eq __PACKAGE__; 18 goto &Exporter::import; 19 } 20 21 1; 22 __END__ 23 24 =head1 NAME 25 26 UNIVERSAL - base class for ALL classes (blessed references) 27 28 =head1 SYNOPSIS 29 30 $is_io = $fd->isa("IO::Handle"); 31 $is_io = Class->isa("IO::Handle"); 32 33 $does_log = $obj->DOES("Logger"); 34 $does_log = Class->DOES("Logger"); 35 36 $sub = $obj->can("print"); 37 $sub = Class->can("print"); 38 39 $sub = eval { $ref->can("fandango") }; 40 $ver = $obj->VERSION; 41 42 # but never do this! 43 $is_io = UNIVERSAL::isa($fd, "IO::Handle"); 44 $sub = UNIVERSAL::can($obj, "print"); 45 46 =head1 DESCRIPTION 47 48 C<UNIVERSAL> is the base class from which all blessed references inherit. 49 See L<perlobj>. 50 51 C<UNIVERSAL> provides the following methods: 52 53 =over 4 54 55 =item C<< $obj->isa( TYPE ) >> 56 57 =item C<< CLASS->isa( TYPE ) >> 58 59 =item C<< eval { VAL->isa( TYPE ) } >> 60 61 Where 62 63 =over 4 64 65 =item C<TYPE> 66 67 is a package name 68 69 =item C<$obj> 70 71 is a blessed reference or a string containing a package name 72 73 =item C<CLASS> 74 75 is a package name 76 77 =item C<VAL> 78 79 is any of the above or an unblessed reference 80 81 =back 82 83 When used as an instance or class method (C<< $obj->isa( TYPE ) >>), 84 C<isa> returns I<true> if $obj is blessed into package C<TYPE> or 85 inherits from package C<TYPE>. 86 87 When used as a class method (C<< CLASS->isa( TYPE ) >>, sometimes 88 referred to as a static method), C<isa> returns I<true> if C<CLASS> 89 inherits from (or is itself) the name of the package C<TYPE> or 90 inherits from package C<TYPE>. 91 92 If you're not sure what you have (the C<VAL> case), wrap the method call in an 93 C<eval> block to catch the exception if C<VAL> is undefined. 94 95 If you want to be sure that you're calling C<isa> as a method, not a class, 96 check the invocant with C<blessed> from L<Scalar::Util> first: 97 98 use Scalar::Util 'blessed'; 99 100 if ( blessed( $obj ) && $obj->isa("Some::Class") { 101 ... 102 } 103 104 =item C<< $obj->DOES( ROLE ) >> 105 106 =item C<< CLASS->DOES( ROLE ) >> 107 108 C<DOES> checks if the object or class performs the role C<ROLE>. A role is a 109 named group of specific behavior (often methods of particular names and 110 signatures), similar to a class, but not necessarily a complete class by 111 itself. For example, logging or serialization may be roles. 112 113 C<DOES> and C<isa> are similar, in that if either is true, you know that the 114 object or class on which you call the method can perform specific behavior. 115 However, C<DOES> is different from C<isa> in that it does not care I<how> the 116 invocant performs the operations, merely that it does. (C<isa> of course 117 mandates an inheritance relationship. Other relationships include aggregation, 118 delegation, and mocking.) 119 120 By default, classes in Perl only perform the C<UNIVERSAL> role. To mark that 121 your own classes perform other roles, override C<DOES> appropriately. 122 123 There is a relationship between roles and classes, as each class implies the 124 existence of a role of the same name. There is also a relationship between 125 inheritance and roles, in that a subclass that inherits from an ancestor class 126 implicitly performs any roles its parent performs. Thus you can use C<DOES> in 127 place of C<isa> safely, as it will return true in all places where C<isa> will 128 return true (provided that any overridden C<DOES> I<and> C<isa> methods behave 129 appropriately). 130 131 =item C<< $obj->can( METHOD ) >> 132 133 =item C<< CLASS->can( METHOD ) >> 134 135 =item C<< eval { VAL->can( METHOD ) } >> 136 137 C<can> checks if the object or class has a method called C<METHOD>. If it does, 138 then it returns a reference to the sub. If it does not, then it returns 139 I<undef>. This includes methods inherited or imported by C<$obj>, C<CLASS>, or 140 C<VAL>. 141 142 C<can> cannot know whether an object will be able to provide a method through 143 AUTOLOAD (unless the object's class has overriden C<can> appropriately), so a 144 return value of I<undef> does not necessarily mean the object will not be able 145 to handle the method call. To get around this some module authors use a forward 146 declaration (see L<perlsub>) for methods they will handle via AUTOLOAD. For 147 such 'dummy' subs, C<can> will still return a code reference, which, when 148 called, will fall through to the AUTOLOAD. If no suitable AUTOLOAD is provided, 149 calling the coderef will cause an error. 150 151 You may call C<can> as a class (static) method or an object method. 152 153 Again, the same rule about having a valid invocant applies -- use an C<eval> 154 block or C<blessed> if you need to be extra paranoid. 155 156 =item C<VERSION ( [ REQUIRE ] )> 157 158 C<VERSION> will return the value of the variable C<$VERSION> in the 159 package the object is blessed into. If C<REQUIRE> is given then 160 it will do a comparison and die if the package version is not 161 greater than or equal to C<REQUIRE>. 162 163 C<VERSION> can be called as either a class (static) method or an object 164 method. 165 166 =back 167 168 =head1 EXPORTS 169 170 None by default. 171 172 You may request the import of three functions (C<isa>, C<can>, and C<VERSION>), 173 however it is usually harmful to do so. Please don't do this in new code. 174 175 For example, previous versions of this documentation suggested using C<isa> as 176 a function to determine the type of a reference: 177 178 use UNIVERSAL 'isa'; 179 180 $yes = isa $h, "HASH"; 181 $yes = isa "Foo", "Bar"; 182 183 The problem is that this code will I<never> call an overridden C<isa> method in 184 any class. Instead, use C<reftype> from L<Scalar::Util> for the first case: 185 186 use Scalar::Util 'reftype'; 187 188 $yes = reftype( $h ) eq "HASH"; 189 190 and the method form of C<isa> for the second: 191 192 $yes = Foo->isa("Bar"); 193 194 =cut
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |