|
|
 |
settype (PHP 3, PHP 4, PHP 5) settype -- Set the type of a variable Descriptionbool settype ( mixed &var, string type )
Set the type of variable var to
type.
Possibles values of type are:
"boolean" (or, since PHP 4.2.0, "bool")
"integer" (or, since PHP 4.2.0, "int")
"float" (only possible since PHP 4.2.0, for older versions use the
deprecated variant "double")
"string"
"array"
"object"
"null" (since PHP 4.2.0)
Returns TRUE on success or FALSE on failure.
Example 1. settype() example |
<?php
$foo = "5bar"; $bar = true; settype($foo, "integer"); settype($bar, "string"); ?>
|
|
See also gettype(),
type-casting and
type-juggling.
User Contributed Notes
settype
16-May-2005 03:22
I needed to pull a zerofilled integer out of a MySQL table and increment it by a certain amount. Unfortunately, PHP treated this integer as if it were a string when I tried to add an amount to it. For instance:
<?php
$a = '0100';
$b = $a + 1;
print $b;
?>
To fix this I created a simple function:
<?php
function convertToInt($string) {
$y = ltrim($string, '0');
$z = 0 + $y;
return $z;
}
$a = '0100';
$b = 2 + convertToInt($a);
print $b;
?>
reinier_deblois at hotmail dot com
13-Mar-2005 12:18
Instead of settype you could use:
<?php
$int=593; $int.="";
James Reiher (IL)
23-Feb-2005 12:50
I had a problem with PHP destroying the value of my integer with leading zeros as follows:
$agentnum = "007";
$agentnum = settype($agentnum, "int");
echo $agentnum; // will show up as 1 instead of 7!
Oddly enough, this works fine, (at least for PHP 4.3):
$agentnumber = "007";
$agentnumber += 0; // convert $number to numeric type
echo $agentnumber; // will now show up as 7!
If you do this for gods sake leave a comment on the line because its definitely not by-the-book coding. Another commentor here has used regular expressions to weed out the leading zeros, so I know its not the only solution.
I also tried the equivelant of:
$agentnum = "007";
$agentnum = (int)$agentnumber;
echo $agentnum;
But the result is a nonsense number, probably by using the concatenation of the ASCII codes as the integer.
memandeemail at gmail dot com
09-Dec-2004 08:17
/**
* @return bool
* @param array[byreference] $values
* @desc Convert an array or any value to Escalar Object [not tested in large scale]
*/
function setobject(&$values) {
$values = (object) $values;
foreach ($values as $tkey => $val) {
if (is_array($val)) {
setobject($val);
$values->$tkey = $val;
}
}
return (bool) $values;
}
23-Nov-2004 04:34
in PHP3 converting a string to any number results in the value becoming 0. To check if a string represents a number try this:
<PRE>
$test = "0001";
$testcp = $test;
settype($testcp,"double");
if (strval($testcp) === $test) {
echo("\$test is a number");
} else {
echo ("\$test is not a number");
}
</PRE>
sdibb at myway dot com
07-Sep-2003 01:03
Using settype is not the best way to convert a string into an integer, since it will strip the string wherever the first non-numeric character begins. The function intval($string) does the same thing.
If you're looking for a security check, or to strip non-numeric characters (such as cleaning up phone numbers or ZIP codes), try this instead:
<?
$number=ereg_replace("[^0-9]","",$number);
?>
djworld at php dot net
17-Jul-2002 09:02
Usually it won't be necessary to use this function, but some times you need to be sure the variables are of some kind. For example, if you send a number to a database query from a variable passed by GET or POST, you may get sure it's a number by doing SetType ($var, 'integer'); so you can avoid security holes if it isn't a number and you don't need to addslashes() it, or for example, if you need to be sure that a number won't have any decimals after rounding it, you may do the same and as it will be an integer, it won't contain decimals.
(ed: change to reflect deleted of other notes)
r dot schechtel at web dot de
06-Aug-2001 05:59
To: neoja@hotmail.com
I believe in this case testing the $id using is_numeric() would be the better solution.
E.g something like this:
<?php
if (is_numeric($id)) {
$db->query($sql);
}
?>
Roman Schechtel
neoja at hotmail dot com
17-Feb-2001 09:42
It is always good to validate all the variables that are given in the url and would cause an error if they are of wrong type. For example, if your page is products.php?id=123 then run settype($id, "integer") in the script, before getting the product info from the database. If the user enters a non-numeric value in the url -- either pasting it wrong or intentionally :) -- the $id will be set to zero and database query will have no errors.
slushpupie at hotmail dot com
22-Jul-2000 12:07
in PHP3 converting a string to any number results in the value becoming 0. To check if a string represents a number try this:
<PRE>
$test = "0001";
$testcp = $test;
settype($testcp,"double");
if (strval($testcp) == $test) {
echo("\$test is a number");
} else {
echo ("\$test is not a number");
}
</PRE>
support at mastebyte dot de
11-Jul-2000 03:39
Note that settype($string, "integer") will set $string to 0 if $string contains any lettery, but the function call will be TRUE
ns at canada dot com
05-May-2000 07:38
This settype() behaviour seems consistent to me. Quoting two sections from the manual:
"When casting from a scalar or a string variable to an array, the variable will become the first element of the array: "
<pre>
2 $var = 'ciao';
3 $arr = (array) $var;
4 echo $arr[0]; // outputs 'ciao'
</pre>
And if (like your code above) you do a settype on an empty variable, you'll end up with a one element array with an empty (not unset!) first element. So appeanding to it will start appending at index 1. As for why reset() doesn't do anything:
"When you assign a value to an array variable using empty brackets, the value will be added onto the end of the array."
It doesn't matter where the array counter is; values are added at the end, not at the counter.
tboothby at felfel dot com
10-Apr-2000 10:33
settype() for some reason increases the initial internal counter for the index of an array if you use<br>
settype($foo, "array");$foo[]='bar';<br>
'bar' will be stored in $foo[1]. furthermore, if you use<br>
reset($foo);$foo[]='barr';<br>
'barr' will be stored in $foo[1] again!
i'm using version 3.0.12 on linux 2.2.5-22
jeffg at NOcounterintuitive dot orgSPAM
27-Oct-1999 05:46
It's worth noting that one can neither <I>settype()</i> nor type-cast a variable as a long. The workaround for this seems to be to use <I>pack()</i>.
| |