晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/rainic/www/oldTZh/wp-content/plugins/elementor-pro/core/database/ |
Upload File : |
<?php
namespace ElementorPro\Core\Database;
use ElementorPro\Core\Utils\Collection;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
abstract class Model_Base implements \JsonSerializable {
// Casting types.
const TYPE_BOOLEAN = 'boolean';
const TYPE_COLLECTION = 'collection';
const TYPE_INTEGER = 'integer';
const TYPE_STRING = 'string';
const TYPE_JSON = 'json';
const TYPE_DATETIME = 'datetime';
const TYPE_DATETIME_GMT = 'datetime_gmt';
/**
* Casts array.
* Used to automatically cast values from DB to the appropriate property type.
*
* @var array
*/
protected static $casts = [];
/**
* Model_Base constructor.
*
* @param array $fields - Fields from the DB to fill.
*
* @return void
*/
public function __construct( array $fields ) {
foreach ( $fields as $key => $value ) {
if ( ! property_exists( $this, $key ) ) {
continue;
}
$this->{$key} = ( empty( static::$casts[ $key ] ) )
? $value
: static::cast( $value, static::$casts[ $key ] );
}
}
/**
* Get the model's table name.
* Throws an exception by default in order to require implementation,
* since abstract static functions are not allowed.
*
* @return string
*/
public static function get_table() {
throw new \Exception( 'You must implement `get_table()` inside ' . static::class );
}
/**
* Create a Query Builder for the model's table.
*
* @param \wpdb|null $connection - MySQL connection to use.
*
* @return Query_Builder
*/
public static function query( \wpdb $connection = null ) {
$builder = new Model_Query_Builder( static::class, $connection );
return $builder->from( static::get_table() );
}
/**
* Cast value into specific type.
*
* @param $value - Value to cast.
* @param $type - Type to cast into.
*
* @return mixed
*/
protected static function cast( $value, $type ) {
if ( null === $value ) {
return null;
}
switch ( $type ) {
case self::TYPE_BOOLEAN:
return boolval( $value );
case self::TYPE_COLLECTION:
return new Collection( $value );
case self::TYPE_INTEGER:
return intval( $value );
case self::TYPE_STRING:
return strval( $value );
case self::TYPE_JSON:
return json_decode( $value, true );
case self::TYPE_DATETIME:
return new \DateTime( $value );
case self::TYPE_DATETIME_GMT:
return new \DateTime( $value, new \DateTimeZone( 'GMT' ) );
}
return $value;
}
/**
* Cast a model property value into a JSON compatible data type.
*
* @param $value - Value to cast.
* @param $type - Type to cast into.
* @param $property_name - The model property name.
*
* @return mixed
*/
protected static function json_serialize_property( $value, $type, $property_name ) {
switch ( $type ) {
case self::TYPE_DATETIME:
case self::TYPE_DATETIME_GMT:
/** @var \DateTime $value */
return $value->format( 'c' );
}
/** @var mixed $value */
return $value;
}
/**
* @return array
*/
#[\ReturnTypeWillChange]
public function jsonSerialize() {
return ( new Collection( (array) $this ) )
->map( function ( $_, $key ) {
$value = $this->{$key};
$type = array_key_exists( $key, static::$casts )
? static::$casts[ $key ]
: null;
if ( null === $value ) {
return $value;
}
// Can be overridden by child model.
$value = static::json_serialize_property( $value, $type, $key );
if ( $value instanceof \JsonSerializable ) {
return $value->jsonSerialize();
}
return $value;
} )
->all();
}
}