Struct ext_php_rs::ffi::_zend_string [−][src]
#[repr(C)]pub struct _zend_string {
pub gc: zend_refcounted_h,
pub h: zend_ulong,
pub len: size_t,
pub val: [c_char; 1],
}
Fields
gc: zend_refcounted_h
h: zend_ulong
len: size_t
val: [c_char; 1]
Implementations
Creates a new Zend string from a str
.
Parameters
str
- String content.persistent
- Whether the string should persist through the request boundary.
Returns
Returns a result containing the Zend string if successful. Returns an error if the given string contains NUL bytes, which cannot be contained inside a C string.
Panics
Panics if the function was unable to allocate memory for the Zend string.
Safety
When passing persistent
as false
, the caller must ensure that the
object does not attempt to live after the request finishes. When a
request starts and finishes in PHP, the Zend heap is deallocated and a
new one is created, which would leave a dangling pointer in the
ZBox
.
Example
use ext_php_rs::types::ZendStr;
let s = ZendStr::new("Hello, world!", false).unwrap();
Creates a new Zend string from a CStr
.
Parameters
str
- String content.persistent
- Whether the string should persist through the request boundary.
Panics
Panics if the function was unable to allocate memory for the Zend string.
Safety
When passing persistent
as false
, the caller must ensure that the
object does not attempt to live after the request finishes. When a
request starts and finishes in PHP, the Zend heap is deallocated and a
new one is created, which would leave a dangling pointer in the
ZBox
.
Example
use ext_php_rs::types::ZendStr;
use std::ffi::CString;
let c_s = CString::new("Hello world!").unwrap();
let s = ZendStr::from_c_str(&c_s, false);
Creates a new interned Zend string from a str
.
An interned string is only ever stored once and is immutable. PHP stores the string in an internal hashtable which stores the interned strings.
As Zend hashtables are not thread-safe, a mutex is used to prevent two interned strings from being created at the same time.
Interned strings are not used very often. You should almost always use a regular zend string, except in the case that you know you will use a string that PHP will already have interned, such as “PHP”.
Parameters
str
- String content.persistent
- Whether the string should persist through the request boundary.
Returns
Returns a result containing the Zend string if successful. Returns an error if the given string contains NUL bytes, which cannot be contained inside a C string.
Panics
Panics if the function was unable to allocate memory for the Zend string.
Safety
When passing persistent
as false
, the caller must ensure that the
object does not attempt to live after the request finishes. When a
request starts and finishes in PHP, the Zend heap is deallocated and a
new one is created, which would leave a dangling pointer in the
ZBox
.
Example
use ext_php_rs::types::ZendStr;
let s = ZendStr::new_interned("PHP", true);
Creates a new interned Zend string from a CStr
.
An interned string is only ever stored once and is immutable. PHP stores the string in an internal hashtable which stores the interned strings.
As Zend hashtables are not thread-safe, a mutex is used to prevent two interned strings from being created at the same time.
Interned strings are not used very often. You should almost always use a regular zend string, except in the case that you know you will use a string that PHP will already have interned, such as “PHP”.
Parameters
str
- String content.persistent
- Whether the string should persist through the request boundary.
Panics
Panics under the following circumstances:
- The function used to create interned strings has not been set.
- The function could not allocate enough memory for the Zend string.
Safety
When passing persistent
as false
, the caller must ensure that the
object does not attempt to live after the request finishes. When a
request starts and finishes in PHP, the Zend heap is deallocated and a
new one is created, which would leave a dangling pointer in the
ZBox
.
Example
use ext_php_rs::types::ZendStr;
use std::ffi::CString;
let c_s = CString::new("PHP").unwrap();
let s = ZendStr::interned_from_c_str(&c_s, true);
Returns the length of the string.
Example
use ext_php_rs::types::ZendStr;
let s = ZendStr::new("hello, world!", false).unwrap();
assert_eq!(s.len(), 13);
Returns true if the string is empty, false otherwise.
Example
use ext_php_rs::types::ZendStr;
let s = ZendStr::new("hello, world!", false).unwrap();
assert_eq!(s.is_empty(), false);
Returns a reference to the underlying CStr
inside the Zend string.
Attempts to return a reference to the underlying str
inside the Zend
string.
Returns the None
variant if the CStr
contains non-UTF-8
characters.
Example
use ext_php_rs::types::ZendStr;
let s = ZendStr::new("hello, world!", false).unwrap();
let as_str = s.as_str();
assert_eq!(as_str, Some("hello, world!"));